我想找到最佳的“ R方式”来展平如下所示的数据框:

  CAT    COUNT     TREAT
   A     1,2,3     Treat-a, Treat-b
   B     4,5       Treat-c,Treat-d,Treat-e


因此它的结构如下:

   CAT   COUNT1  COUNT2 COUNT3  TREAT1   TREAT2   TREAT3
    A    1       2      3       Treat-a  Treat-b  NA
    B    4       5      NA      Treat-c  Treat-d  Treat-e


生成源数据帧的示例代码:

df<-data.frame(CAT=c("A","B"))
df$COUNT <-list(1:3,4:5)
df$TREAT <-list(paste("Treat-", letters[1:2],sep=""),paste("Treat-", letters[3:5],sep=""))


我相信我需要结合rbind和unlist吗?任何帮助将不胜感激。
-蒂姆

最佳答案

这是基数r中的另一种方法

df<-data.frame(CAT=c("A","B"))
df$COUNT <-list(1:3,4:5)
df$TREAT <-list(paste("Treat-", letters[1:2],sep=""),paste("Treat-", letters[3:5],sep=""))


创建一个辅助函数来完成工作

f <- function(l) {
  if (!is.list(l)) return(l)
  do.call('rbind', lapply(l, function(x) `length<-`(x, max(lengths(l)))))
}


始终测试您的代码

f(df$TREAT)

#           [,1]      [,2]      [,3]
# [1,] "Treat-a" "Treat-b" NA
# [2,] "Treat-c" "Treat-d" "Treat-e"


套用

df[] <- lapply(df, f)
df

#     CAT COUNT.1 COUNT.2 COUNT.3 TREAT.1 TREAT.2 TREAT.3
#   1   A       1       2       3 Treat-a Treat-b    <NA>
#   2   B       4       5      NA Treat-c Treat-d Treat-e

关于r - 如何展平包含列表的R数据框?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34206003/

10-12 14:02
查看更多