使用R中的aggregate()和sum()函数获得不同的结果

时间:2015-02-19 09:10:49

标签: sum aggregate

我正在尝试使用R中的prop.damage函数通过crop.damage变量获取变量STATEaggregate()总量的摘要数据框。以下代码:

stormdata$prop.damage <- with(stormdata, ifelse(PROPDMGEXP == 'K', (PROPDMG * 10^3), ifelse(PROPDMGEXP == 'M', (PROPDMG * 10^6), ifelse(PROPDMGEXP == 'B', (PROPDMG * 10^9), NA))))
stormdata$crop.damage <- with(stormdata, ifelse(CROPDMGEXP == 'K', (CROPDMG * 10^3), ifelse(CROPDMGEXP == 'M', (CROPDMG * 10^6), ifelse(CROPDMGEXP == 'B', (CROPDMG * 10^9), NA))))
damagecost <- with(stormdata, aggregate(x = prop.damage + crop.damage, by = list(STATE), FUN = sum, na.rm = TRUE))
damagecost <- damagecost[order(damagecost$x, decreasing = TRUE), ]

此处,PROPDMGEXPCROPDMGEXP变量用作PROPDMGCROPDMG数字变量的乘数。我的主要数据集是stormdata

我得到以下内容:

> head(damagecost)
   Group.1            x
8       CA 120211639720
13      FL  27302948100
38      MS  14804212820
63      TX  12550131850
20      IL  11655920860
2       AL   9505473250

但是,例如,如果我为加利福尼亚州('CA')“手动”添加,我会得到这个:

> sum(stormdata$prop.damage[stormdata$STATE == 'CA'], na.rm = TRUE) + sum(stormdata$crop.damage[stormdata$STATE == 'CA'], na.rm = TRUE)
[1] 127115859410

我不明白为什么我会得到不同的结果。

1 个答案:

答案 0 :(得分:0)

事实证明,prop.damagecrop.damage中的变量NA都有NAs个值,aggregate在{{1}}中添加变量时影响了结果功能。