“和”对于R中的因子错误没有意义

时间:2019-12-29 20:50:22

标签: r dplyr

我正在尝试通过数据集中的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。任何建议,将不胜感激。

2 个答案:

答案 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