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' は数値でなければなりません)

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])

グループ「Cereals」の合計加重平均を計算するために、AF2 の値が NA である行のみを R に無視させるにはどうすればよいですか? 最終的に、これはループで実行され、他の 7 つのグループと他の 7 つの地域にわたる AF2 の加重平均が計算されます。

ありがとう!

4

0 に答える 0