相关疑难解决方法(0)

如何展平包含列表的R数据框?

我想找到最好的"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的组合?任何帮助将不胜感激. - 蒂姆

r

14
推荐指数
2
解决办法
2970
查看次数

在R/Rcpp中转置列表的最快方法

我有一个清单:

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]])? …

performance r rcpp

9
推荐指数
2
解决办法
679
查看次数

标签 统计

r ×2

performance ×1

rcpp ×1