Dplyrで変数名として文字列を渡す方法


次のいずれかの方法を使用して、文字列を変数名として dplyr に渡すことができます。

方法 1: get() を使用する

 df %>% filter(get(my_var) == ' A ')

方法 2: .data を使用する

 df %>% filter(. data [[my_var]] == ' A ')

次の例は、次のデータ フレームで各メソッドを実際に使用する方法を示しています。

 #create data frame
df <- data. frame (team=c('A', 'A', 'A', 'B', 'B'),
                 points=c(99, 90, 86, 88, 95),
                 assists=c(33, 28, 31, 39, 34),
                 rebounds=c(30, 28, 24, 24, 28))

#view data frame
df

  team points assists rebounds
1 A 99 33 30
2 A 90 28 28
3 A 86 31 24
4 B 88 39 24
5 B 95 34 28

例 1: get() を使用して dplyr に変数名として文字列を渡す

dplyr のfilter()関数に変数名として文字列を渡してデータ フレームをフィルタリングしようとすると、空のデータ フレームが得られます。

 library (dplyr)

#define variable
my_var <- ' team '

#attempt to filter for rows where team is equal to a variable
df %>% filter(my_var == ' A ')

[1] team points assists rebounds
<0 rows> (or 0-length row.names)

これを回避する 1 つの方法は、 get()関数で変数名をラップすることです。

 library (dplyr)

#define variable
my_var <- ' team '

#filter for rows where team is equal to a variable
df %>% filter(get(my_var) == ' A ')

  team points assists rebounds
1 A 99 33 30
2 A 90 28 28
3 A 86 31 24

filter () 関数で get()関数を使用すると、チームが A に等しい行のみを対象としたデータ フレームの行を正常にフィルターできます。

例 2: .data を使用して dplyr に変数名として文字列を渡す

dplyr のfilter()関数に文字列を変数名として渡すもう 1 つの方法は、次のように.data関数を使用することです。

 library (dplyr)

#define variable
my_var <- ' team '

#filter for rows where team is equal to a variable
df %>% filter(. data [[my_var]] == ' A ')

  team points assists rebounds
1 A 99 33 30
2 A 90 28 28
3 A 86 31 24

filter()関数で.data関数を使用すると、チームが A に等しい行のみを対象として、データ フレーム内の行を正常にフィルターできます。

追加リソース

次のチュートリアルでは、dplyr で他の一般的なタスクを実行する方法を説明します。

dplyrを使用してグループごとに最初の行を選択する方法
dplyrを使って複数の条件でフィルタリングする方法
dplyrを使用して特定の文字列を含む行をフィルタリングする方法

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です