我有一个数据框如下:
head(newStormObject)
FATALITIES INJURIES PROPVALDMG CROPVALDMG EVTYPE total
1 0 15 2.5e+05 0 TORNADO 15
2 0 0 2.5e+04 0 TORNADO 0
3 0 3 2.5e+07 0 TORNADO 3
4 0 3 2.5e+07 0 TORNADO 3
5 0 0 0.0e+00 0 TSTM WIND 1
6 0 0 0.0e+00 0 HAIL 2
7 0 0 0.0e+00 0 HAIL 3
8 0 0 0.0e+00 0 TSTM WIND 0
9 0 0 0.0e+00 0 HAIL 0
10 0 0 0.0e+00 0 TSTM WIND 0
11 0 0 0.0e+00 0 TSTM WIND 0
12 0 0 0.0e+00 0 HAIL 1
13 0 0 0.0e+00 0 HAIL 1
14 0 0 0.0e+00 0 HAIL 5
15 0 0 0.0e+00 0 TSTM WIND 0
我试图做的是按事件类型(EVTYPE)分组并相应地对总计列求和,因此打印数据框看起来如下所示:
FATALITIES INJURIES PROPVALDMG CROPVALDMG EVTYPE total
1 0 15 2.5e+05 0 TORNADO 21
2 0 0 0.0e+00 0 HAIL 11
3 0 0 0.0e+00 0 TSTM WIND 0
为了尝试这样做,我写了以下内容
newStormObject %>% group_by(EVTYPE, total) %>% summarise(EVTYPE, sum(total))
但我得到一个错误说'错误:无法修改分组变量' .
'pipe statement'中的前两个语句似乎工作正常但只是根据第一个块给出输出,所以错误似乎来自'summary'语句 .
任何解决这个问题的建议都将受到赞赏 .
2 回答
在使用
sum
'total'更新'total'之后,我们可以使用slice
获取所有其他列的第一个值 .注意:根据示例,'EVTYPE'“HAIL”的'total'为12
这是一个基本的R解决方案,返回相同的值(以稍微不同的顺序)
duplicated
用于选择每个EVTYPE级别的第一个观察值,aggregate
用于计算总变量的总和 . 这些结果在EVTYPE上合并 .行按
factor
自动存储因子变量的顺序排序,即按字母顺序排列 . 由于merge
将列变量放在结果数据集的前面,因此列与所需的输出略有混乱 . 修复列是传递原始data.frame的名称的问题 .