总计:总和对因素没有意义

use*_*975 3 aggregate r 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))
Run Code Online (Sandbox Code Playgroud)

基本上我在努力

df<-df[-1,]    
aggregate(df[,2:7],list(df[,1]),sum)
Run Code Online (Sandbox Code Playgroud)

但我收到一条消息:

Error in Summary.factor(c(4L, 1L), na.rm = FALSE) : 
  sum not meaningful for factors
Run Code Online (Sandbox Code Playgroud)

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

Tho*_*mas 9

这是因为您正在创建数据框.例如,c1是字符,因为矢量只能有一个类.当您将它们放入数据帧时,这些字符向量将进一步强制为因子.因此,你试图运行sum因素.你已经想到了这一点,但后来尝试将因子转换为数字,这可能会给你无意义的结果.

简单的答案是按列而不是按行构建数据框,因此您不会遇到如此多的强制问题.

根据您已有的数据,这将解决您的问题:

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

(感谢@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
Run Code Online (Sandbox Code Playgroud)