r - 合计 : sum not meaningful for factors

标签 r aggregate factors

我正在尝试一些应该很简单的事情,非常欢迎任何关于正在发生的事情的提示。

我有一个大型数据框,其中包含从某些城市进口的国家/地区。对于某些国家/地区,我有 2 个条目。我想总结每个城市的进口量,并为每个国家/地区分配一个独特的行。我正在使用 aggregate功能。例如(我包括数据框的一小部分):

municipalities<-c("country",1100056, 1100106,1100205,1100304,1200104,1200252)
c1<-c("Afghanistan",2,34,23.4,5,0,0)    
c2<-c("Afghanistan",0,20,11.1,5.4,2,0)    
c3<-c("Albania",12,120,11.4,5.1,12,10)    
c4<-c("Albania",0,40,61.1,65.4,652,2)
df<-as.data.frame(rbind(municipalities,c1,c2,c3,c4))

基本上我正在尝试
df<-df[-1,]    
aggregate(df[,2:7],list(df[,1]),sum)

但我收到一条消息:
Error in Summary.factor(c(4L, 1L), na.rm = FALSE) : 
  sum not meaningful for factors

我试图强制df是数字,将字符声明为字符等,但似乎没有任何帮助。

最佳答案

这是因为您创建数据框的方式。例如,c1是字符,因为向量只能有一个类。当您将它们放入数据框中时,这些字符向量将被进一步强制为因子。因此,您正在尝试运行 sum关于因素。您已经想到了这一点,但随后尝试将因子转换为数字,这可能会给您带来荒谬的结果。

简单的答案是按列而不是按行构建数据框,这样您就不会遇到这么多强制问题。

鉴于您已经拥有的数据,这将解决您的问题:

df[] <- lapply(df, function(x) type.convert(as.character(x)))
aggregate(. ~ V1, df, sum)

(感谢@AnandaMahto 提供了比我原来更简洁的转换方式。)

结果:
           V1 V2  V3   V4   V5  V6 V7
1 Afghanistan  2  54 34.5 10.4   2  0
2     Albania 12 160 72.5 70.5 664 12

关于r - 合计 : sum not meaningful for factors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19493252/

相关文章:

c - 如何编写 1 个 C 程序打印一个数的所有因数、因数之和并检查它是否为完美数

prolog - 数的因数

删除 data.table 列 X 中的一些重复项,但如果列 Y 匹配条件则保留重复项

apache-spark - Spark 数据帧中模式(最常见元素)的聚合

django - django查询聚合功能慢吗?

r - 在 R 中使用多个不同的 FUN 聚合多个变量

java - 打印给定数字的所有唯一因子组合

r - 如何使用传单在r中偏移折线

r - 在 mutate 之外使用 nest 和 purrr::map

r - 如何获得两个矩阵的交集?