将列添加到data.frames列表中

时间:2013-06-30 20:06:56

标签: r dataframe

这是与我的一个旧帖Add columns to a dataframe based on values from a list类似的问题。

现在,我想使用解决方案提供它,但我不想将它应用于单个data.frame,而是想在data.frame列表中使用它。

简而言之,我有一个data.frames列表,如下所示:

df <- list(data.frame(A=c("a","b","c"), 
                      B=c("1","2","1"), 
                      C=c(0.1,0.7,0.4)), 
            data.frame(A=c("d","e","f"), 
                       B=c("2","2","3"), 
                      C=c(0.5,0.1,0.5)), 
            data.frame(A=c("g","h","i"), 
                       B=c("3","1","2"), 
                       C=c(0.2,0.1,0.5)))

包含名称与df$B匹配的元素的列表,即这些值是来自df$B的值的排列,这是一个示例:

 ll <- list('1'=c(0.1,0.1,0.4,0.2,0.1,0.4),
            '2'=c(0.1,0.1,0.5,0.7,0.5,0.7),
            '3'=c(0.1,0.1,0.2,0.2,0.2,0.5))

我想创建一个新的data.frames列表,但列表df的每个数据框中都有新列,对应列表df$Bll的值,但同时他们从ll 采样的时间是多少? 这是一个理想的输出,以获得更好的解释

> list.df
[[1]]
  A B   C  P1  P2  P3  P4  P5  P6
1 a 1 0.1 0.1 0.1 0.4 0.2 0.1 0.4
2 b 2 0.7 0.1 0.5 0.7 0.1 0.5 0.1
3 c 1 0.4 0.4 0.1 0.2 0.1 0.1 0.4

[[2]]
  A B   C  P1  P2  P3  P4  P5  P6
1 d 2 0.5 0.1 0.7 0.5 0.1 0.7 0.1
2 e 2 0.1 0.7 0.5 0.1 0.7 0.1 0.5
3 f 3 0.5 0.5 0.5 0.2 0.1 0.2 0.1

[[3]]
  A B   C  P1  P2  P3  P4  P5  P6
1 g 3 0.2 0.1 0.5 0.2 0.2 0.2 0.5
2 h 1 0.1 0.2 0.1 0.4 0.2 0.2 0.4
3 i 2 0.5 0.1 0.5 0.1 0.1 0.5 0.7

我对一个data.frame的解决方案就是:

sampfun <- function(i, l) sample(l[[as.character(i)]], 10000, replace=TRUE)
list.df <- cbind(df, t(sapply(df$B, sampfun, l = ll)))

问题在于我不知道如何实现此解决方案以与data.frames列表一起使用。

非常感谢您的帮助

注意:我的真实的 data.frames列表有9,000个元素,我希望添加超过10,000列,因此内存和加速很重要。

0 个答案:

没有答案