我在网站上看到了许多类似的问题,但不知何故找不到答案。我有一个看起来像这样的数据框:
head(ftrade)
Imports Value Exports Value balance nacer2
1 7349 185712 178363 01
2 4772816 99763470 94990654 01
3 4772816 99763470 94990654 01
4 4772816 99763470 94990654 01
5 1022528 7880815 6858287 01
6 8295652 215331 -8080321
我想通过nacer2汇总我的数据,同时对这些值求和。我的预期输出将是这样的:
Imports Value Exports Value balance nacer2
1 50000 100000 50000 01
2 50000 100000 50000 02
3 50000 100000 50000 03
4 50000 100000 50000 04
5 50000 100000 50000 05
其中前三列中的值是原始数据的总和。我运行以下命令:
ftrade <- do.call(data.frame, aggregate(cbind("Exports Value",
"Imports Value",
balance) ~ nacer2,
data = ftrade,
sum))
返回错误消息:Summary.factor(c(1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,:错误的总和对因子无意义
我在该论坛上看到的所有答案都表明,这是因为变量之一是一个因素,所以求和没有意义。我已经检查过,并且我的变量都不是因素:
str(ftrade)
'data.frame': 11963 obs. of 4 variables:
$ Imports Value: num 7349 4772816 4772816 4772816 1022528 ...
$ Exports Value: num 185712 99763470 99763470 99763470 7880815 ...
$ balance : num 178363 94990654 94990654 94990654 6858287 ...
$ nacer2 : chr "01" "01" "01" "01" ...
由于我正在汇总nacer2,因此它是一个角色应该不成问题。我尝试再次将所有内容转换为数值,但是似乎没有任何解决办法。我不确定在这里到底发生了什么。我在这里想念什么吗?
感谢您的帮助, 克莱门特(Clement)
答案 0 :(得分:0)
如果您确实需要在变量名中使用空格(您可能不需要),那么您需要使用反引号来引用它们:
names(mtcars)[1] <- 'm p g'
aggregate(cbind(disp, 'm p g') ~ vs, mtcars, sum)
Error in Summary.factor(c(8L, 8L, 18L, 18L, 12L, 12L, 12L, 22L, 21L, 20L, : ‘sum’ not meaningful for factors
aggregate(cbind(disp, `m p g`) ~ vs, mtcars, sum)
vs disp m p g 1 0 5528.7 299.1 2 1 1854.4 343.8
无论如何,我的建议是不要在变量名中使用空格。
答案 1 :(得分:0)
我能够使用dplyr做我想做的事情:
ftrade <- ftrade %>%
group_by(nacer2) %>%
summarise(balance = sum(balance))
它做的很好,所以我认为我们可以考虑结案了。但是,我仍然很好奇听到关于这里到底发生了什么的解释。