【发布时间】:2021-09-10 10:47:39
【问题描述】:
我正在尝试根据向量中的值有条件地对 data.frames 列表中的 data.frames 进行子集化。基本上,每当a > 0 我想对相应的列表元素进行子集化以获得那么多随机采样的行。
# a list
l <- list( data.frame(x=1:5, y = 1:5),
data.frame(x= 11:15, y = 11:15),
data.frame(x=21:25, y = 21:25) )
# a vector
a <- c(3, 1,-2)
# one possible permutation of the desired output
[[1]]
x y
1 1 1
2 3 3
3 5 5
[[2]]
x y
1 13 13
[[3]]
x y
1 21 21
2 22 22
3 23 23
4 24 24
5 25 25
我一直在尝试使用purrr::map_if() 执行此操作,如下所示,但是
我的函数只使用a 的第一个值作为所有data.frames 的行数。也就是说,列表的第一个和第二个元素是 3 行的子集,但我希望第二个元素只有 1 行。
f <- function(x, count) {x[sample(nrow(x), count),]}
purrr::map_if(l, a > 0, f, count = a)
有没有办法为map_if() 的每次迭代传递“a”中的值?
还是其他解决方案?
【问题讨论】: