我正在尝试根据向量中的值有条件地对 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)
有没有办法为 的每次迭代传递 'a' 中的值map_if()
?或者其他一些解决方案?
带有Map
+ 的基本 Rifelse
> Map(function(x, k) x[sample(nrow(x), ifelse(k > 0, k, nrow(x))), ], l, a)
[[1]]
x y
3 3 3
4 4 4
5 5 5
[[2]]
x y
2 12 12
[[3]]
x y
2 22 22
1 21 21
5 25 25
3 23 23
4 24 24
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句