我正在尝试通过数据集中的evtype(事件类型)汇总死亡人数:
library(dplyr)
fatalities <- aggregate(FATALITIES ~ EVTYPE, data=tidyNOAA, sum)
fatalities <- arrange(fatalities,desc(FATALITIES),EVTYPE)[1:10,]
fatalities$EVTYPE <- factor(fatalities$EVTYPE, levels = fatalities$EVTYPE)
但是,我不断收到以下错误消息:
Error in Summary.factor(c(1L, 1L, 1L, 1L, 1L, 1L, 8L, 1L, 1L, 1L, 1L, :
'sum' not meaningful for factors
Calls: <Anonymous> ... aggregate.data.frame -> lapply -> FUN -> lapply -> Summary.factor
Execution halted
这是正在使用的dataset。任何建议,将不胜感激。
答案 0 :(得分:0)
也许您可以使用as.numeric()
fatalities <- aggregate(FATALITIES ~ EVTYPE, data=tidyNOAA, FUN = function(v) sum(as.numeric(levels(v))[v]))
**带有虚拟数据的示例*
tidyNOAA <- data.frame(
EVTYPE = c("x","x","y","y","z"),
FATALITIES = factor(c(1,2,4,3,5)))
> tidyNOAA
EVTYPE FATALITIES
1 x 1
2 x 2
3 y 4
4 y 3
5 z 5
fatalities <- aggregate(FATALITIES ~ EVTYPE, data=tidyNOAA, FUN = function(v) sum(as.numeric(levels(v))[v]))
> fatalities
EVTYPE FATALITIES
1 x 3
2 y 7
3 z 5
答案 1 :(得分:0)
想知道如果包含在基数R中的tapply
不能满足您的要求...
例如,在此数据中:
set.seed(123)
EVTYPE <- sample(LETTERS[1:4], 10, replace = T)
FATALITIES <- sample(1:3, 10, replace = T)
df <- data.frame(EVTYPE, FATALITIES)
df
EVTYPE FATALITIES
1 B 3
2 D 2
3 B 3
4 D 2
5 D 1
6 A 3
7 C 1
8 D 1
9 C 1
10 B 3
您将使用tapply
来将两个变量相互制表,并使用函数sum
来获取因子水平的求和频率:
tapply(df$FATALITIES, df$EVTYPE, sum)
A B C D
3 9 2 6