2017-08-29 14 views
-1

我需要实现以下任务;你能帮我做到吗?R-如何根据变量增量列表在数据帧中动态添加列

我的数据帧。

U_ID Value           AD CT 
    1  list(`Cno`="50",`cna'="jhon")    ia BG 
    1  list(`Cno`="20",`cna'="guna")    AS DB 
    2  list(`Cno`="30",`cna'="rt",`cf'="ty")  BN FV 
    2  NULL          VF TY 
    3  list(`Cno`="30")       RR TT 

我期望的输出将是

U_ID Value         Cno cna cf  AD CT 
1  list(`Cno`="50",`cna'="jhon")   50 jhon NULL ia BG 
1  list(`Cno`="20",`cna'="guna")   20 guna NULL AS DB 
2  list(`Cno`="30",`cna'="rt",`cf'="ty") 30 rt ty  BN FV 
2  NULL         NULL NULL NULL VF TY 
3  list(`Cno`="30")      30 NULL NULL  RR TT 

数据:

structure(list(U_ID = c(1, 1, 2, 2, 3), Value = list(structure(list(
    `Cno#` = "50", cna = "jhon"), .Names = c("Cno#", "cna")), 
    structure(list(`Cno#` = "50", cna = "guna"), .Names = c("Cno#", 
    "cna")), structure(list(`Cno#` = "30", cna = "rt", cf = "ty"), .Names = c("Cno#", 
    "cna", "cf")), "NULL", structure(list(`Cno#` = "30"), .Names = "Cno#")), 
    AD = c("ia", "AS", "BN", "VF", "RR"), CT = c("BG", "DB", 
    "FV", "TY", "TT")), .Names = c("U_ID", "Value", "AD", "CT" 
), row.names = c(NA, -5L), class = "data.frame") 
+0

请提供*重复性*比如你的数据帧。 –

+0

Hi.Sven,我编辑了数据帧数据。请检查还原我。 –

+0

您可以使用'dput'与您的数据框并将结果发布到您的问题中吗? –

回答

0

这是dplyr的解决方案。

library(dplyr) 

dat %>% 
    mutate(idx = as.character(`is.na<-`(cumsum(Value != "NULL"), 
             Value == "NULL"))) %>% 
    left_join(filter(., Value != "NULL") %>% 
       pull(Value) %>% 
       bind_rows(.id = "idx")) %>% 
    select(-idx) 

这里,dat是您的数据框的名称。

结果:

U_ID  Value AD CT Cno# cna cf 
1 1 50, jhon ia BG 50 jhon <NA> 
2 1 50, guna AS DB 50 guna <NA> 
3 2 30, rt, ty BN FV 30 rt ty 
4 2  NULL VF TY <NA> <NA> <NA> 
5 3   30 RR TT 30 <NA> <NA> 
+0

,非常感谢,它的工作很好。 –

+0

,我查过了。 –

+0

我有一个更多的疑问,如果我有多个列像列表value1,value2,值3,等等..我怎么能做同样的以上... –

0

,您应该使用:splitstackshape::cSplit功能。