【问题标题】:R-how to add dynamically column in dataframe based on list of variable incresesR-如何根据变量增加列表在数据框中动态添加列
【发布时间】:2017-08-29 05:27:08
【问题描述】:

我需要完成以下任务;你能帮我做吗?

我的数据框。

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")

【问题讨论】:

  • 请提供您的数据框的可重现示例。
  • Hi.Sven,我已经编辑了数据框数据。请检查恢复我。
  • 您能否将dput 与您的数据框一起使用并在您的问题中发布结果?
  • @Sven .please 在我编辑的帖子中找到 dput 数据..

标签: r dataframe reshape


【解决方案1】:

这是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>

【讨论】:

  • ,我查过了。
  • 我还有一个疑问,如果我有多个列列表,如 value1、value2、value 3 等。我该如何做与上述相同的操作...
  • @GunasekarS 您应该将此问题作为新问题发布。
  • @ Sven。这是我的帖子,R-如何根据变量增量的多个列表(列)动态地将列添加到数据框中。请检查一下。
【解决方案2】:

你应该使用:splitstackshape::cSplit 函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    相关资源
    最近更新 更多