0

在随附的 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 个区域中的加权平均值。

谢谢!

4

0 回答 0