2016-07-08 2 views
0

サブエリアのデータを持つデータフレームsubdist.dfがあります。私は、データフレーム内の共通の属性、つまりDISTRICTの列に基づいて行の値を合計しようとしています。集計関数がpaste0 with Rを使用していません

次のコード行が

hello2 <-aggregate(.~DISTRICT, subdist.df,sum) 

に動作します。しかし、この1はしていません。

hello <-aggregate(noquote(paste0(".~","DISTRICT")), subdist.df,sum) 

私はこれが事実である理由を理解することができません。私は、DISTRICTがユーザーからの任意の入力を引数として使用できる関数で使用する必要があります。

+0

小さな再現可能な例と期待される出力を表示してください – akrun

+1

aggregateの式インターフェイスの代わりにdata.frameにS3メソッドを使用することをお勧めします。 irisを使った例: 'var < - " Species "; (iris [[var]])、sum) '、' –

答えて

1

使用虹彩を例にdata.frame:

aggregate(.~Species, iris, sum) 
    Species Sepal.Length Sepal.Width Petal.Length Petal.Width 
1  setosa  250.3  171.4   73.1  12.3 
2 versicolor  296.8  138.5  213.0  66.3 
3 virginica  329.4  148.7  277.6  101.3 

aggregate関数によって必要とされるのみで表現はなく式を生成noquoteとして、動作しないpaste0を次

aggregate(noquote(paste0(".~","Species")), iris, sum) 
Error in aggregate.data.frame(as.data.frame(x), ...) : 
    arguments must have same length 

代わりに、paste0の前にas.formulaを追加すると、次のようになります。

aggregate(as.formula(paste0(".~","Species")), iris, sum) 

    Species Sepal.Length Sepal.Width Petal.Length Petal.Width 
1  setosa  250.3  171.4   73.1  12.3 
2 versicolor  296.8  138.5  213.0  66.3 
3 virginica  329.4  148.7  277.6  101.3 
関連する問題