1. ホーム
  2. r

[解決済み] aggregate() で "invalid 'type' (character of argument)" エラーが発生する。

2022-02-11 14:45:17

質問

以下のような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)

私は

FUN(X[[i]], ...) のエラー : 引数の '型' (文字) が無効です。

解決方法は?

このエラーの発生元は sum() の文字要素を合計しようとしているためです。 color の列があります。

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

を削除する必要があります。 color カラムを x 引数は、集約に使われるのではなく、実際には 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)