使用 aggregate() 时出现 "invalid 'type' (character) of argument" 错误

Getting "invalid 'type' (character) of argument" error with aggregate()

我有以下 CSV:

color,val2,val3
blue,1,4
green,7,3
blue,4,2
red,9,3
red,2,6
blue,1,7

我只想按颜色聚合。

当我尝试时:

csv <- read.csv("/home/user/file.csv", stringsAsFactors=FALSE)
data <-aggregate(csv, list(csv[["color"]]), sum)

我明白了

Error in FUN(X[[i]], ...) : invalid 'type' (character) of argument

该错误来自 sum(),因为您正试图对 color 列中的字符元素求和。

sum("a")
# Error in sum("a") : invalid 'type' (character) of argument

您需要从 x 参数中删除 color 列,因为它没有在聚合中使用,但实际上是 by 参数。

aggregate(csv[-1], csv["color"], sum)
#   color val2 val3
# 1  blue    6   13
# 2 green    7    3
# 3   red   11    9

但是公式方法也可以工作并且更干净(但更慢)。

aggregate(. ~ color, csv, sum)

在这种情况下,您需要将颜色移到另一侧,因为您确实无法在字符向量上聚合。您还可以使用 dplyr 包,如下所示:

library(dplyr)
csv %>% group_by(color) %>% summarise_each(funs(sum))

具有以下输出:

  color  val2  val3
  (chr) (int) (int)
1  blue     6    13
2 green     7     3
3   red    11     9