gpt4 book ai didi

r - 几列的加权平均值,按组(在 data.table 中)

转载 作者:行者123 更新时间:2023-12-04 12:01:07 25 4
gpt4 key购买 nike

这个问题是在 group weighted means 上的另一个问题之后:我想使用 data.table 创建加权组内平均值.与最初的问题不同的是,要平均的变量的名称是在字符串向量中指定的。

数据:

df <- read.table(text= "
region state county weights y1980 y1990 y2000
1 1 1 10 100 200 50
1 1 2 5 50 100 200
1 1 3 120 1000 500 250
1 1 4 2 25 100 400
1 1 4 15 125 150 200
2 2 1 1 10 50 150
2 2 2 10 10 10 200
2 2 2 40 40 100 30
2 2 3 20 100 100 10
", header=TRUE, na.strings=NA)

使用 Roland 对上述问题的建议答案:
library(data.table)
dt <- as.data.table(df)
dt2 <- dt[,lapply(.SD,weighted.mean,w=weights),by=list(region,state,county)]

我有一个带字符串的向量来动态确定我想要组内加权平均值的列。
colsToKeep = c("y1980","y1990")

但我不知道如何将它作为 data.table 魔术的参数传递。

我试过
 dt[,lapply(
as.list(colsToKeep),weighted.mean,w=weights),
by=list(region,state,county)]`

但我然后得到:
Error in x * w : non-numeric argument to binary operator

不知道如何实现我想要的。

额外问题:我希望保留原始列名称,而不是获取 V1 和 V2。

注意我使用的是 data.table 包的 1.9.3 版。

最佳答案

通常,您应该能够执行以下操作:

dt2 <- dt[,lapply(.SD,weighted.mean,w=weights), 
by = list(region,state,county), .SDcols = colsToKeep]

即,只需将这些列提供给 .SDcols .但目前,这行不通 due to a bug ,在那 weights列将不可用,因为它未在 .SDcols 中指定.

在修复之前,我们可以按如下方式完成此操作:
dt2 <- dt[, lapply(mget(colsToKeep), weighted.mean, w = weights), 
by = list(region, state, county)]
# region state county y1980 y1990
# 1: 1 1 1 100.0000 200.0000
# 2: 1 1 2 50.0000 100.0000
# 3: 1 1 3 1000.0000 500.0000
# 4: 1 1 4 113.2353 144.1176
# 5: 2 2 1 10.0000 50.0000
# 6: 2 2 2 34.0000 82.0000
# 7: 2 2 3 100.0000 100.0000

关于r - 几列的加权平均值,按组(在 data.table 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26019346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com