这是一个与我的旧帖子类似的问题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 列表,但在 list 的每个数据框中都有新列,df
它们对应于df$B
in list的值,ll
但同时它们是来自的采样值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 列,因此内存和速度很重要。