【发布时间】:2016-10-09 13:37:58
【问题描述】:
我的数据如下所示:
df <- data.frame(
x = c("dog", "dog", "dog", "cat", "cat", "fish", "fish", "fish", "squid", "squid", "squid"),
y = c(10, 11, 6, 3, 4, 5, 5, 9, 14, 33, 16)
)
我想遍历数据并在某个“包含/过滤”列表中为每种动物获取一个值,然后将它们加在一起。
例如,也许我只关心狗、猫和鱼。
animals <- c("dog", "cat", "fish")
在重采样 1 中,我可以获得 10、4、9(总和 = 23),在重采样 2 中,我可以获得 6、3、5(总和 = 14)。
我刚刚创建了一个依赖dplyr 的非常糟糕的复制/for 函数,但它似乎效率极低:
ani_samp <- function(animals){
total <- 0
for (i in animals) {
v <- df %>%
filter(x == i) %>%
sample_n(1) %>%
select(y) %>%
as.numeric()
total <- total + v
}
return(total)
}
replicate(1000,ani_samp(animals))
我该如何改进这个重采样/伪引导代码?
【问题讨论】: