【发布时间】:2021-05-15 18:32:12
【问题描述】:
我有下表关于两个物种的丰度:
df <- tribble(~name, ~id, ~freq, ~toselect,
"spA", 22, 10, 4,
"spA", 23, 10, 4,
"spA", 21, 8, 4,
"spA", 19, 6, 4,
"spA", 25, 5, 4,
"spA", 26, 4, 4,
"spA", 27, 4, 4,
"spA", 28, 3, 4,
"spA", 29, 3, 4,
"spA", 24, 2, 4,
"spA", 30, 2, 4,
"spA", 20, 1, 4,
"spA", 31, 1, 4,
"spA", 33, 1, 4,
"spB", 27, 9, 2,
"spB", 28, 1, 2,
"spB", 29, 1, 2,
"spB", 24, 1, 2,
"spB", 30, 1, 2,
"spB", 20, 1, 2,
"spB", 31, 1, 2,
"spB", 33, 1, 2)
我想选择 n 行,其中 n 作为物种特定参数包含在小标题中(col“toselect”)。但是,我想根据特定组中物种的频率(col“freq”)选择这些行,即重复是可以的并且想要(例如,在 spB 的情况下,我实际上希望算法选择组 27 两次。 )。
我实际上遇到了两个问题。传统的sample_n(),非常适合选择所需的行数。
df %>% group_by(name) %>%
sample_n(toselect[1], replace = T)
我想到的另一个选择是它的继任者slice_sample()。这是一个很酷的功能,适用于重复项。但是,不适用于每个组的不同数量的选定行。
df %>% group_by(name) %>%
slice_sample(n = 4, replace = T) # instead of 4 I would like to put there "toselect[1]"
最后,这两个选项都不适用于比例选择。我尝试添加参数weight = freq,但这仍然会产生随机选择。所以我问:有没有办法做到这一点?
【问题讨论】: