web-dev-qa-db-ja.com

dplyrは、グループ化変数名を文字列として渡すことにより、複数の列でグループ化します

探索的データ分析のためにR shinyで作業しています。 2つのチェックボックス入力があり、1つのチェックボックスにはすべてのカテゴリ変数が設定され、他のすべてには数値変数が設定されています。次に、この2つの選択にgroupbyを次のように適用します。

var1 <- input$variable1      # Checkbox with categorical variables
var2 <- input$variable2      # Checkbox with numerical variables

v$data <- dataset %>%
  group_by_(var1) %>%
  summarize_(Sum = interp(~sum(x), x = as.name(var2))) %>%
  arrange(desc(Sum))

Groupbyが1列のみの場合は完全に機能しますが、複数の列でgroupbyを使用します。ユーザーが複数のカテゴリ変数を選択すると、列名の配列が返されます。 dplyr groupbyでこれを渡す方法。

18
Neil

変数名のベクトルがある場合は、.dots=group_by_パラメーターに渡す必要があります。例えば:

mtcars %>% 
   group_by_(.dots=c("mpg","hp","wt")) %>% 
   summarize(x=mean(gear))
36
MrFlick

rlangを作成したのと同じチームによって作成されたdplyrパッケージを使用できます。

具体的には、syms関数と!!!関数は次のようになります。

library(dplyr)
library(rlang)

group_cols <- c("vs", "am")

mtcars %>% 
  group_by(!!!syms(group_cols)) %>% 
  summarize(mean_wt = mean(wt))

この 密接に関連した質問と回答!!演算子とsym関数は、単一の列名(つまり、長さ1の文字ベクトル)に使用されます。

4
bschneidr

dplyrパッケージの最新バージョンには、_group_by_や_group_by_if_などの_group_by_at_のバリアントが含まれています。これらを使用して、select関数に似た構文で列の選択を実行できます。

select(my_data, one_of(group_cols))を使用して列のリストを選択できるように、_group_by_at_を使用して以下を実行できます。

_library(dplyr)

group_cols <- c("vs", "am")

mtcars %>% 
  group_by_at(.vars = vars(one_of(group_cols))) %>% 
  summarize(mean_wt = mean(wt))
_
1
bschneidr