_df <- structure(list(`a a` = 1:3, `a b` = 2:4), .Names = c("a a", "a b"
), row.names = c(NA, -3L), class = "data.frame")
_
データは次のようになります
_ a a a b
1 1 2
2 2 3
3 3 4
_
選択する呼び出しに続いて
_select(df, 'a a')
_
与える
_Error in abs(ind[ind < 0]) :
non-numeric argument to mathematical function
_
「a」を選択したり、select
を使用してスペースのない名前に変更するにはどうすればよいですか?私は次のアプローチを知っています:
names(df)[1] <- "a"
select(df, a=1)
select(df, ends_with("a"))
しかし、大規模なデータセットで作業している場合、インデックス番号または類似の列名を知らなくても正確に一致させるにはどうすればよいですか?
バックティック`
を使用して、select
変数を使用できます。
select(df, `a a`)
# a a
# 1 1
# 2 2
# 3 3
ただし、列の名前を変更することが主な目的である場合は、rename
パッケージでplyr
を使用できます。このパッケージでは、""
と``
の両方を使用できます。
rename(df, replace = c("a a" = "a"))
rename(df, replace = c(`a a` = "a"))
またはbase
Rで:
names(df)[names(df) == "a a"] <- "a"
さまざまな引用符の使用に関するより詳細な説明については、?Quotes
を参照してください。 「名前と識別子」セクションは、ここで特に重要です。
他の[構文的に無効]の名前は、引用符で囲まれていれば使用できます。推奨される引用符はバックティックです」。
有効な名前については、?make.names
も参照してください。
this postdplyr
の名前変更についても参照
この記事の執筆時点での現在のバージョンであるdplyr 0.5.0の時点で、バックティックに代わるものがいくつかあります。
プログラムで引数を列として選択しようとしていて、paste
/sprintf
のような名前をバックティックにしたくない場合は、as.name
を組み合わせて使用できます。 非標準の評価select
のバージョン(select_
):
dplyr::select_(df, as.name("a a"))
dplyr
関数の多くには、非標準バージョンがあります。特にselect
の場合、選択ヘルパーone_of
と組み合わせて標準バージョンを使用することもできます。ドキュメントについては、?dplyr::select_helpers
を参照してください。
dplyr::select(df, dplyr::one_of("a a"))