Re: [問題] 階層資料列轉欄

看板R_Language作者 (cywhale)時間9年前 (2016/12/22 12:38), 編輯推噓2(202)
留言4則, 2人參與, 最新討論串2/2 (看更多)
library(data.table) library(magrittr) dt <- fread('LV Obj Dep 0 A1 "" 1 A1 A1 2 B1 A1 1 A1 A1 2 B2 A1 3 C1 B2 1 A1 A1 2 B2 A1 3 C2 B2 4 D1 C2') dt[,stx:=ifelse(LV<1,"Dep1",paste0("Dep",LV)),by=.(LV)] %>% .[,nL:=as.integer(stx=="Dep1")] %>% .[,ngp:=cumsum(nL)] x1 <- dcast(dt, ngp ~ stx, value.var = "Obj") # ngp Dep1 Dep2 Dep3 Dep4 #1: 1 A1 NA NA NA #2: 2 A1 B1 NA NA #3: 3 A1 B2 C1 NA #4: 4 A1 B2 C2 D1 ※ 引述《criky (立業成家)》之銘言: : [問題類型]: : 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) : [軟體熟悉度]: : 新手(沒寫過程式,R 是我的第一次) : [問題敘述]: : 資料如下: : id LV Obj Dep : 1 0 A1 : 2 1 A1 A1 : 2 2 B1 A1 : 3 1 A1 A1 : 3 2 B2 A1 : 3 3 C1 B2 : 4 1 A1 A1 : 4 2 B2 A1 : 4 3 C2 B2 : 4 4 D1 C2 : 想將資料轉成以下方式: : id Obj Dep1 Dep2 Dep3 Dep4 : 1 A1 A1 : 2 A1 A1 B1 : 3 A1 A1 B2 C1 : 4 A1 A1 B2 C2 D1 : 空格可以填NA或留空都可, : 階層數不一定,最小0,最大30 : 同一個Obj可能有許多階層的關係~ : 再請教大家了,謝謝 : [關鍵字]: : level : 自己查版上文章看推文,將主要部分試出來了, : dt_list<-tapply(dt$Obj,dt$id,c) : $`1` : [1] "A1" : $`2` : [1] "A1" "B1" : $`3` : [1] "A1" "B2" "C1" : $`4` : [1] "A1" "B2" "C2" "D1" : 本來想用 do.call(rbind,.) 但有空格處會以重覆值填補 : 若用as.data.frame將list轉df, : 則是只有1個變數,還要再分割處理 : 後來發現tapply只看obj及id, : 但真實data可能連id都要自己作出來, : 其實還是有點難度 @@ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.65.48 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1482381492.A.3F0.html

12/22 21:33, , 1F
非常感謝,可執行~不過我的資料階層有點亂,再想想怎麼整理
12/22 21:33, 1F

12/22 22:31, , 2F
LV只要123..12..這種跑法,上面應行得通,除非沒規則so
12/22 22:31, 2F

12/23 22:32, , 3F
研究了一下再回去看資料,發現我之前的例子說錯了 XD
12/23 22:32, 3F

12/23 22:33, , 4F
我再編輯自己的文章,謝謝cy大
12/23 22:33, 4F
文章代碼(AID): #1OMrYqFm (R_Language)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1OMrYqFm (R_Language)