执行两个列表的计算

时间:2017-03-22 03:58:03

标签: r

我在R

中有一个数据框
rank=c(0,0,0,1:9,0,0,0,0,0,1:7)
group = rep(1:2,each=12)
d <- data.frame(rank, group)

d_sp <- split(d, d$group)
r <- lapply(d_sp, function(x) sample(1:tail(x$rank, n=1), 6) )

我想写下以下两行代码而不为每个列表写一行代码:

 d_sp[[1]]$samp_rank1 <- d_sp[[1]]$rank %in% r[[1]]
 d_sp[[2]]$samp_rank2 <- d_sp[[2]]$rank %in% r[[2]]

但是Map("%in%", d_sp$rank, r)不能用于此目的。怎么做?

此外,如果我不需要拆分数据框并在每个组中执行相同的工作,那将非常有用。

2 个答案:

答案 0 :(得分:2)

如果您不想制作data.frame和split,则可以尝试ave,这类似于group_by的{​​{1}} mutate逻辑:dplyr

sample_rank <- ave(rank, group, FUN = function(x){
    r <- sample(1:x[length(x)], 6)
    x %in% r
})

答案 1 :(得分:1)

我们可以在两个列表中使用Map,并仅提取rank的{​​{1}}列,并使用d_sp为每个列表添加新列。

cbind