在随附的 data.table 中,我试图计算 AF2 列的 5 年加权平均值。AF2 是数据集中其他列的函数,基于以下内容:
Region Country Group Item Year Dom.Supply Feed Seed
NAm.Oceania Australia Cereals Wheat 1961 1727 111 421
NAm.Oceania Australia Cereals Wheat 1962 1807 123 420
NAm.Oceania Australia Cereals Wheat 1963 1933 166 452
NAm.Oceania Australia Cereals Wheat 1964 1939 182 444
NAm.Oceania Australia Cereals Wheat 1965 2016 250 519
NAm.Oceania Australia Cereals Rye 1961 768 NA 174
NAm.Oceania Australia Cereals Rye 1962 840 NA 170
NAm.Oceania Australia Cereals Rye 1963 615 NA 181
NAm.Oceania Australia Cereals Rye 1964 980 NA 109
NAm.Oceania Australia Cereals Rye 1965 918 NA 190
NAm.Oceania Canada Cereals Wheat 1961 3736 1195 1027
NAm.Oceania Canada Cereals Wheat 1962 3835 1208 1064
NAm.Oceania Canada Cereals Wheat 1963 4301 1462 1145
NAm.Oceania Canada Cereals Wheat 1964 3842 1262 1089
NAm.Oceania Canada Cereals Wheat 1965 4323 1356 1140
NAm.Oceania Canada Cereals Rye 1961 133 72 15
NAm.Oceania Canada Cereals Rye 1962 126 61 20
NAm.Oceania Canada Cereals Rye 1963 163 103 18
NAm.Oceania Canada Cereals Rye 1964 125 64 20
NAm.Oceania Canada Cereals Rye 1965 283 201 20
data$AF2 <- 1-((data$Feed + data$Seed) / data$Dom.Supply)
这导致第 6-10 行的 NA 值。
以下代码(作为较早问题的结果提供)返回“NaN” - 由于 NA 值,这是有道理的。
data2 <- data[, list(
AF2.WA=sum(Dom.Supply*AF2)/sum(Dom.Supply)),
by=Year]
如下修改以删除 NA,会提供错误消息(ColMeans 中的错误(data2[, -1, with = F], na.rm = T) : 'x' must be numeric)
data2 <- data[, list(
AF2.WA=sum(Dom.Supply*AF2)/sum(Dom.Supply), na.rm=T),
by=Year]
所需的输出是以下代码(最终以表格形式用于所有区域和组):
colMeans(data2[,-1, with=F], na.rm=T)
require(plotrix)
std.error(data2[, -1, with=F])
如何让 R 仅忽略 AF2 中的值为 NA 的行以计算“谷物”组的总加权平均值?最终,这将循环运行,计算 AF2 在其他 7 个组和其他 7 个区域中的加权平均值。
谢谢!