[英]apply list of indices to list of dataframes
我需要将索引列表应用于具有一对一映射的数据框列表。 索引列表的第一个元素仅转到第一个 dataframe 等等。 索引列表适用于数据框中的行。 并且需要通过选择索引列表中未提及的行来创建补充数据框列表。
以下是一些示例数据:
set.seed(1)
A <- data.frame(matrix(rnorm(40,0,1), nrow = 10))
B <- data.frame(matrix(rnorm(40,2,3), nrow = 10))
C <- data.frame(matrix(rnorm(40,3,4), nrow = 10))
dflis <- list(A,B,C)
# Create a sample row index
ix <- lapply(lapply(dflis,nrow), sample, size = 6)
到目前为止,我已经管理了这个工作但看起来很难看的代码:
dflis.train <- lapply(seq_along(dflis), function(x) dflis[[x]][ix[[x]],])
dflis.test <- lapply(seq_along(dflis), function(x) dflis[[x]][-ix[[x]],])
有人可以建议更好,更优雅的东西吗?
使用Map
/ mapply
而不是单变量lapply
,这样您就可以遍历两个对象并应用 function,例如:
Map(function(d,r) d[r,], dflis, ix)
或者,如果您想变得花哨:
Map(`[`, dflis, ix, TRUE)
符合您要求的答案。
identical(
Map(function(d,r) d[r,], dflis, ix),
lapply(seq_along(dflis), function(x) dflis[[x]][ix[[x]],])
)
#[1] TRUE
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.