Re: [問題] Recode寫法

看板R_Language作者 (天)時間10年前 (2015/09/21 14:56), 10年前編輯推噓2(206)
留言8則, 1人參與, 最新討論串2/3 (看更多)
※ 引述《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://www.ptt.cc/bbs/R_Language/M.1442818590.A.200.html

09/21 15:07, , 1F
學了一招rle 謝謝!
09/21 15:07, 1F

09/21 15:52, , 2F
再請問,我用 tmp$values=1:length(tmp$lengths)
09/21 15:52, 2F

09/21 15:52, , 3F
為什麼值沒有任何改變啊? 我原本是想要算各流水號的累積n
09/21 15:52, 3F
不太懂,麻煩問題描述清楚一點,謝謝~

09/21 16:33, , 4F
問題我描述在自己的文章了
09/21 16:33, 4F

09/21 16:33, , 5F
第二行想問的是輸入後 tmp值和原來的一樣 覺得奇怪
09/21 16:33, 5F
do.call(c, sapply(tmp$lengths, function(x) 1:x)) # 1 2 1 2 3 1 2 3 1 2 1

09/21 16:45, , 6F
感謝!
09/21 16:45, 6F

09/23 12:01, , 7F
再請問,若id是文字串,好像就不能用前一篇文章的寫法了?
09/23 12:01, 7F

09/23 12:01, , 8F
編流水號的部分
09/23 12:01, 8F
直接改成用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
文章代碼(AID): #1L_weU80 (R_Language)
討論串 (同標題文章)
文章代碼(AID): #1L_weU80 (R_Language)