Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何从列表列值添加新列_R - Fatal编程技术网

R 如何从列表列值添加新列

R 如何从列表列值添加新列,r,R,如何在数据框中取消列表列并从未列表列值添加新列。请在下面找到我的df 我的数据框 Status AuditResult Deship Item Active list(DDID=c("2","First"),Dvalue=c("Bpin","67")) list(UserID=1,Add="Stet,Bpi

如何在数据框中取消列表列并从未列表列值添加新列。请在下面找到我的df

我的数据框

Status       AuditResult                                               Deship                                        Item

Active    list(DDID=c("2","First"),Dvalue=c("Bpin","67"))  list(UserID=1,Add="Stet,Bpin")  list(Menu=1,Bill=9,Deship =list(list(IDesc ="A",vendor=5)))

Inactive  list(DDID=c("Second","8"),Dvalue=c("CA","98"))   list(UserID=2,Add="Stet,Bpin")  list(Menu=1,Bill=8,Deship =list(list(IDesc ="B,N,O",vendor=4)))

OnHold    list(DDID=c("78","8",NA),Dvalue=c("UK","76"))   list(UserID=1,Add="Stet,Bpin")  list(Menu=1,Bill=7,Deship =list(list(IDesc ="L,q",vendor=2)))
预期的数据帧

Status   DDID          Dvalue         UserID    Add         Menu  Bill  IDesc    vendor

Active   "2","First"   "Bpin","67"    1       "Stet,Bpin"    1     9     "A"        5

Inactive "Second","8"  "CA","98"      2       "Stet,Bpin"    1     8     "B,N,O"    4

OnHold   "78","8",NA   "UK","76"      1       "Stet,Bpin"    1     7     "L,q"      2
如果有任何非结构化代码,请建议我

Dput


假设您的数据帧名为
dt
,这里有一个选项

library(tidyverse)

dt2 <- dt %>%
  select(Status, AuditResult) %>%
  mutate(DDID = map(AuditResult, ~.$DDID),
         Dvalue = map(AuditResult, ~.$Dvalue)) %>%
  mutate(DDID = map_chr(DDID, ~toString(.)),
         Dvalue = map_chr(Dvalue, ~toString(.))) %>%
  select(-AuditResult)

dt3 <- dt %>%
  select(Status, Deship) %>%
  unnest()

dt4 <- dt %>%
  select(Status, Item) %>%
  unnest() %>%
  unnest()

dt_final <- reduce(list(dt2, dt3, dt4), left_join, by = "Status")
dt_final
#     Status      DDID   Dvalue UserID        Add Menu Bill IDesc vendor
# 1   Active  2, First Bpin, 67      1 Stet, Bpin    1    9     A      5
# 2 Inactive Second, 8   CA, 98      2 Stet, Bpin    1    8 B,N,O      4
# 3   OnHold 78, 8, NA   UK, 76      1 Stet, Bpin    1    7   L,q      2
库(tidyverse)
dt2%
选择(状态、审核结果)%%>%
突变(DDID=map(AuditResult,~.$DDID),
Dvalue=map(审核结果,~.$Dvalue))%>%
突变(DDID=map_chr(DDID,~toString(.)),
Dvalue=map_chr(Dvalue,~toString(.))%>%
选择(-AuditResult)
dt3%
选择(状态、卸载)%>%
unnest()
dt4%
选择(状态,项目)%>%
unest()%>%
unnest()

dt_final由于每个列表列都有不同的结构,因此必须以不同的方式处理它们

以R为基数:

dfnew <- data.frame(df$Status,
                    do.call(rbind, lapply(df$AuditResult, function(x) sapply(x, toString))),
                    do.call(rbind, df$Deship),
                    do.call(rbind, lapply(df$Item, unlist)))
names(dfnew) <- sub('^.*\\.','',names(dfnew))

,感谢您的回复,其工作正常,但DDID,Dvalue列类为返回“list”,是否有机会更改其as字符。因为进一步执行一些分组操作,其中一个不支持“list”类型。@udya请查看我的更新。现在,
DDID
Dvalue
是字符列。@udya我很高兴它有帮助。如果有帮助,请接受我的回答。,我在上面的帖子中还有一个疑问,我只有三个列列表。但是实时数据帧将有50多个列列表,每个列列表的值都超过15。我不想手动添加任何列。是否有任何方法可以动态添加列名。@udya如果所有列表都有不同的结构,很难自动添加列名。看看Jaap的回答是否有用。谢谢你的回答,上面的代码运行良好,但是你有硬编码的数据帧头名称。有没有办法通过检查is列是“列表”来动态执行@udya
sapply(df,class)
sapply(df,is.List)
,非常感谢你,同时我面临一个问题,特殊字符(#)和空格替换为(.)。因为在我的实时列表数据中,我有dup历史地址和emp#。但它替换了dup.history.address和emp。
dfnew <- data.frame(df$Status,
                    do.call(rbind, lapply(df$AuditResult, function(x) sapply(x, toString))),
                    do.call(rbind, df$Deship),
                    do.call(rbind, lapply(df$Item, unlist)))
names(dfnew) <- sub('^.*\\.','',names(dfnew))
> dfnew
    Status      DDID   Dvalue UserID        Add Menu Bill IDesc vendor
1   Active  2, First Bpin, 67      1 Stet, Bpin    1    9     A      5
2 Inactive Second, 8   CA, 98      2 Stet, Bpin    1    8 B,N,O      4
3   OnHold 78, 8, NA   UK, 76      1 Stet, Bpin    1    7   L,q      2