我对r语言和编程都比较陌生,非常感谢您的帮助 :)
我试图从我的数据框中按组选择前n个值,其中n取决于另一个值(以下称为factor
)。然后,应该通过组对所选值进行汇总以计算平均值(d100
)。我的目标是获得每个组的一个d100
值。
(背景:在林业中,有一种称为d100的指标,它是每公顷最粗的100棵树的平均直径。如果采样区域的大小小于1公顷,则需要选择相应较少的树来计算d100。这就是factor的作用。)
首先,我尝试将factor
作为自己的列放入我的数据框中。然后我想也许有像“查找表”之类的东西会有所帮助,因为R说,n必须是一个单独的数字。但我不知道如何创建一个查找函数。(请参见示例代码的最后一部分。)或者,在使用它之前对df$factor
进行汇总是否能解决问题?
示例数据:
(我用这种方式指出了我不确定如何在R中编写它们的表达式:'I dont know how')
# creating sample data
library(tidyverse)
df <- data.frame(group = c(rep(1, each = 5), rep(2, each = 8), rep(3, each = 10)),
BHD = c(rnorm(23, mean = 30, sd = 5)),
factor = c(rep(pi*(15/100)^2, each = 5), rep(pi*(20/100)^2, each = 8), rep(pi*(25/100)^2, each = 10))
)
# group by ID, then select top_n values of df$BHD with n depending on value of df$factor
df %>%
group_by(group) %>%
slice_max(
BHD,
n = 100*df$factor,
with_ties = F) %>%
summarise(d100 = mean('sliced values per group'))
# other thought: having a "lookup-table" for the factor like this:
lt <- data.frame(group = c(1, 2, 3),
factor = c(pi*(15/100)^2, pi*(20/100)^2, pi*(25/100)^2))
# then
df %>%
group_by(group) %>%
slice_max(
BHD,
n = 100*lt$factor 'where lt$group == df$group',
with_ties = F) %>%
summarise(d100 = mean('sliced values per group'))
我已经找到了这个回答,它似乎与我的问题类似,但并没有完全帮助到我。