[英]Count occurrence of a categorical variable, when grouping and summarising by a different variable in R
[英]Summarising by a group variable in r
我有一個數據框,如下所示:
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語句”中的前兩個語句似乎工作正常,但僅根據第一個塊給出輸出,因此錯誤似乎來自“ summarise”語句。
解決該問題的任何建議將不勝感激。
在將“ total”的sum
更新為“ total”之后,我們可以使用slice
來獲取所有其他列的第一個值。
library(dplyr)
df1 %>%
group_by(EVTYPE) %>%
mutate(total = sum(total)) %>%
slice(1L) %>%
arrange(desc(total))
# FATALITIES INJURIES PROPVALDMG CROPVALDMG EVTYPE total
# <int> <int> <dbl> <int> <chr> <int>
#1 0 15 250000 0 TORNADO 21
#2 0 0 0 0 HAIL 12
#3 0 0 0 0 TSTM WIND 1
注意:根據示例,“ EVTYPE”“ HAIL”的“總計”為12
這是一個基本R解決方案,它返回相同的值(順序稍有不同)
merge(df[!duplicated(df$EVTYPE), -length(df)],
aggregate(total ~ EVTYPE, data=df, sum), by="EVTYPE")
EVTYPE FATALITIES INJURIES PROPVALDMG CROPVALDMG total
1 HAIL 0 0 0 0 12
2 TORNADO 0 15 250000 0 21
3 TSTM_WIND 0 0 0 0 1
duplicated
用於選擇每個EVTYPE級別的第一個觀察值, aggregate
用於計算總變量的總和。 這些結果在EVTYPE上合並。
這些行按factor
自動存儲因子變量的順序(即按字母順序)排序。 由於merge
,列與所需的輸出略有混亂, merge
將by變量置於結果數據集的前面。 固定列是傳遞原始data.frame名稱的問題。
merge(df[!duplicated(df$EVTYPE), -length(df)],
aggregate(total ~ EVTYPE, data=df, sum), by="EVTYPE")[, names(df)]
FATALITIES INJURIES PROPVALDMG CROPVALDMG EVTYPE total
1 0 0 0 0 HAIL 12
2 0 15 250000 0 TORNADO 21
3 0 0 0 0 TSTM_WIND 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.