我想找到最好的"R方式"来展平看起来像这样的数据帧:
CAT COUNT TREAT
A 1,2,3 Treat-a, Treat-b
B 4,5 Treat-c,Treat-d,Treat-e
Run Code Online (Sandbox Code Playgroud)
所以它的结构如下:
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
Run Code Online (Sandbox Code Playgroud)
生成源数据帧的示例代码:
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=""))
Run Code Online (Sandbox Code Playgroud)
我相信我需要rbind和unlist的组合?任何帮助将不胜感激. - 蒂姆
我有一个清单:
ls <- list(c("a", "b", "c"), c("1", "2", "3"), c("foo", "bar", "baz"))
ls
#> [[1]]
#> [1] "a" "b" "c"
#> [[2]]
#> [1] "1" "2" "3"
#> [[3]]
#> [1] "foo" "bar" "baz"
Run Code Online (Sandbox Code Playgroud)
我希望"转置"给予:
resulting_ls
#> [[1]]
#> [1] "a" "1" "foo"
#> [[2]]
#> [1] "b" "2" "bar"
#> [[3]]
#> [1] "c" "3" "baz"
Run Code Online (Sandbox Code Playgroud)
我可以用:
mat <- matrix(unlist(ls), ncol = 3, byrow = TRUE)
resulting_ls <- lapply(1:ncol(mat), function(i) mat[, i])
Run Code Online (Sandbox Code Playgroud)
但是根据我的真实数据,它非常慢......(我需要为许多列表执行此操作,每个列表都比上面的示例大得多)
对于大型列表length(ls)和/或执行此操作的最快方法是什么length(ls[[i]])? …