2016-07-08 42 views
0

我有一個數據框subdist.df,其中有分區的數據。我試圖根據數據框中的一個共同屬性總結行的值,即DISTRICT列。集合函數不適用於R中的paste0

下面的代碼行工作

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

但是這一次沒有。

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

我無法理解爲什麼會出現這種情況。我需要在一個函數中使用它,其中DISTRICT可以是來自用戶的任何輸入作爲參數。

+0

請顯示一個小的可重複的例子和預期的輸出 – akrun

+1

我會建議使用S3的方法data.frame而不是聚合的公式接口。有關虹膜的示例:'var < - 「Species」;集合(虹膜[setdiff(names(iris),var)],by = list(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 

以下paste0不起作用,如noquote僅在需要時通過aggregate函數產生的表達式,而不是一個公式:

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