2014-12-21 30 views
3

我試圖用dplyr分組和總結一個數據幀,但不斷收到以下錯誤:[R dplyr summarize_each - >「錯誤:無法修改分組變量」

Error: cannot modify grouping variable

下面是生成的代碼它:

data_summary <- labeled_dataset %>% 
    group_by("Activity") %>% 
    summarise_each(funs(mean)) 

下面是我申請這個數據幀的結構:

> str(labeled_dataset) 
'data.frame': 10299 obs. of 88 variables: 
$ Subject       : int 1 1 1 1 1 1 1 1 1 1 ... 
$ Activity       : Factor w/ 6 levels "LAYING","SITTING",..: 3 3 3 3 3 3 3 3 3 3 ... 
$ tBodyAccmeanX     : num 0.289 0.278 0.28 0.279 0.277 ... 
$ tBodyAccmeanY     : num -0.0203 -0.0164 -0.0195 -0.0262 -0.0166 ... 
$ tBodyAccmeanZ     : num -0.133 -0.124 -0.113 -0.123 -0.115 ... 
$ tGravityAccmeanX     : num 0.963 0.967 0.967 0.968 0.968 ... 
$ tGravityAccmeanY     : num -0.141 -0.142 -0.142 -0.144 -0.149 ... 
$ tGravityAccmeanZ     : num 0.1154 0.1094 0.1019 0.0999 0.0945 ... 
    ... 

唯一的裁判我發現這個錯誤是另一個帖子,建議先取消組合,以確保數據尚未分組。我試過沒有成功。

感謝,

盧克

+2

你有沒有嘗試過不上'「活動」'引號? 'dplyr'使用不同的函數來引用或不引用。 –

回答

6

不要把引號分組變量的名稱:

data_summary <- labeled_dataset %>% 
    group_by(Activity) %>% 
    summarise_each(funs(mean)) 
+0

或使用'group_by _(「Activity」)'也應該有效。 –

1

貌似出現了兩個問題:

  1. 分組變量名稱用引號(「活動」而不是 活動) - 謝謝,理查德!
  2. 通過不指定要彙總的列,dplyr試圖總結每列的均值,包括包含分組變量的前兩列。

我固定的代碼,指定除了分組之外的所有列,如下所示:

data_summary <- labeled_dataset %>% 
    group_by(Activity) %>% 
    summarise_each(funs(mean), tBodyAccmeanX:tGravityAccmeanX) 
+1

你說前兩列是分組變量,但你只能按第二個(Activity)列進行分組。如果按分組所需的所有列進行分組,則dplyr將只使用summerise_each和mutate_each中的其餘列。順便說一句,如果你只需要去掉一個柱,就像在這種情況下一樣,你也可以使用summarise_each中的'-Subject'來否定它。 –

+0

我實際上是由兩個變量(活動和主題)開始分組,但在進行故障排除時卻下降到了一個。一旦我發現我需要排除分組變量,它可以與一兩個工作。感謝您使用「-Subject」的提示。 – Luke