[問題] 階層資料整理

看板R_Language作者 (立業成家)時間9年前 (2016/12/23 23:57), 9年前編輯推噓1(101)
留言2則, 2人參與, 最新討論串1/1
[問題類型]: 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) [軟體熟悉度]: 新手(沒寫過程式,R 是我的第一次) [問題敘述]: 我的階層資料如下,大概會有幾種情形: 以4層為例,從第4層obj=D1開始看: lv obj dep 4 D1 C1 #Y 4 D1 C2 #Y 3 D1 B1 3 D1 B2 2 D1 A1 1 D1 A2 3 C1 B1 #Y 3 C2 B2 #Y 3 C2 B3 #Y 2 C1 B1 2 C2 B2 2 C2 A3 1 C1 B1 1 C2 B2 1 C2 A1 2 B1 A1 #Y 2 B1 A2 #Y 2 B2 A1 #Y 2 B3 A2 #Y 1 B1 A1 1 B1 A2 1 B2 A1 1 B3 A1 1 A1 #Y 1 A2 #Y 以D1為例,就去看LV MAX=4 的dep= C1, C2 ,LV=3,2,1 的data不管 C1, C2 的LV MAX=3 的dep=B1, B2, B3 ,LV=2,1 的data不管 B1,B2,B3 的LV MAX=2 的dep=A1, A2 , LV=1 的data不管 最後是 底層 LV=1 的A1, A2 我的想法是先group by obj, summaries LV MAX, 用迴圈方式作,先謝謝各位了~ 我想要的是同樣的資料欄位,取 #Y的列即可,其它列不需要 早上試了一下,做了一種方式呈現階層,雖然不是我本來想要的, 不過還是貼上來看一下 dt1<-select(dt,lv1=lv,dep=obj,dep1=dep) dt2<-select(dt,lv2=lv,dep1=obj,dep2=dep) dt_maxlv<-dt %>% group_by(obj) %>% summarise(maxlv=max(lv)) dt_dep4<-left_join(dt_maxlv,dt,by=c("obj"="obj","maxlv"="lv")) %>% left_join(dt1) %>% group_by(obj,dep,dep1) %>% summarise(max(lv1)) %>% left_join(dt2) %>% group_by(obj,dep,dep1,dep2) %>% summarise(maxlv=max(lv2)) %>% filter(maxlv==2) dt_dep4 obj dep dep1 dep2 maxlv <chr> <chr> <chr> <chr> <int> 1 D1 C1 B1 A1 2 2 D1 C1 B1 A2 2 3 D1 C2 B2 A1 2 4 D1 C2 B3 A2 2 以上四筆是正確的階層關係 下午終於試出來了,再full join回去,不過好像繞了一大圈 XD dt.df<-data.frame(dt_dep4) %>% full_join(.[,c(2,3)],by=c("obj"="dep","dep"="dep1")) %>% full_join(.[,c(3,4)],by=c("obj"="dep1","dep"="dep2")) %>% select(1,2) %>% na.exclude %>% distinct dt.df obj dep 1 D1 C1 2 D1 C2 3 C1 B1 4 C2 B2 5 C2 B3 6 B1 A1 7 B1 A2 8 B2 A1 9 B3 A2 [關鍵字]: level -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 27.147.47.152 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1482508641.A.C9A.html ※ 編輯: criky (27.147.47.152), 12/24/2016 08:49:42 ※ 編輯: criky (27.147.47.152), 12/24/2016 08:51:16

12/24 09:30, , 1F
最後要的形狀長怎樣? 看不懂你的文字。
12/24 09:30, 1F

12/24 10:22, , 2F
和本來的欄位相同,取我要的 #Y 那幾列
12/24 10:22, 2F
※ 編輯: criky (27.147.47.152), 12/24/2016 16:01:16
文章代碼(AID): #1ONKbXoQ (R_Language)
文章代碼(AID): #1ONKbXoQ (R_Language)