作者celestialgod (天)
看板R_Language
標題Re: [問題] Recode寫法
時間Mon Sep 21 14:56:26 2015
※ 引述《criky (立業成家)》之銘言:
: [問題類型]:
: 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來)
: [軟體熟悉度]:
: 入門(寫過其他程式,只是對語法不熟悉)
: [問題敘述]:
: 若有一欄位id,R要怎麼編出id的流水號?
: id → id2
: 1122 1
: 1122 1
: 1133 2
: 1133 2
: 1133 2
: 2255 3
: 2255 3
: 2255 3
: 2255 3
: 4444 4
: 4444 4
: 5555 5
id = c("1122", "1122", "1133", "1133", "1133", "2255", "2255", "2255",
"4444", "4444", "5555")
tmp = rle(id)
tmp$values = 1:length(tmp$values)
inverse.rle(tmp)
# [1] 1 1 2 2 2 3 3 3 4 4 5
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.109.73.159
※ 文章網址: https://webptt.com/m.aspx?n=bbs/R_Language/M.1442818590.A.200.html
1F:推 criky: 學了一招rle 謝謝! 09/21 15:07
2F:→ criky: 再請問,我用 tmp$values=1:length(tmp$lengths) 09/21 15:52
3F:→ criky: 為什麼值沒有任何改變啊? 我原本是想要算各流水號的累積n 09/21 15:52
不太懂,麻煩問題描述清楚一點,謝謝~
4F:→ criky: 問題我描述在自己的文章了 09/21 16:33
5F:→ criky: 第二行想問的是輸入後 tmp值和原來的一樣 覺得奇怪 09/21 16:33
do.call(c, sapply(tmp$lengths, function(x) 1:x))
# 1 2 1 2 3 1 2 3 1 2 1
6F:→ criky: 感謝! 09/21 16:45
7F:推 criky: 再請問,若id是文字串,好像就不能用前一篇文章的寫法了? 09/23 12:01
8F:→ criky: 編流水號的部分 09/23 12:01
直接改成用factor就好
library(dplyr)
library(data.table)
library(magrittr)
id_ = c("1122", "1122", "1133", "1133", "1133", "2255", "2255", "2255",
"2255", "4444", "4444", "5555")
dat = data.table(id = id_)
dat %>% mutate(id2 = as.integer(factor(id))) %>% group_by(id) %>%
mutate(id3 = 1:length(id2))
id id2 id3
1 1122 1 1
2 1122 1 2
3 1133 2 1
4 1133 2 2
5 1133 2 3
6 2255 3 1
7 2255 3 2
8 2255 3 3
9 2255 3 4
10 4444 4 1
11 4444 4 2
12 5555 5 1
※ 編輯: celestialgod (140.109.73.190), 10/06/2015 12:10:13
※ 編輯: celestialgod (140.109.73.190), 10/07/2015 16:24:41