繁体   English   中英

将索引列表应用于数据框列表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM