6

文字列変数に格納したデータフレーム内のすべての列を選択したいと思います。例えば:

v1 <- rnorm(100)
v2 <- rnorm(100)
v3 <- rnorm(100)
df <- data.frame(v1,v2,v3)

私は次のことを達成したい:

df[,c('v1','v2')]

しかし、(c('v1'、'v2'))の代わりに変数を使用したい(これらはすべて失敗します):

select.me <- "'v1','v2'"
df[,select.me]
df[,c(select.me)]
df[,c(paste(select.me,sep=''))]

簡単な質問で助けてくれてありがとう、

4

2 に答える 2

20

ここでの大きな皮肉は、あなたが「これをやりたい」と言ったとき、最初の表現が成功するはずだったということです。

df[,c('v1','v2')]
> str( df[,c('v1','v2')] )
'data.frame':   100 obs. of  2 variables:
 $ v1: num  -0.3347 0.2113 0.9775 -0.0151 -1.8544 ...
 $ v2: num  -1.396 -0.95 -1.254 0.822 0.141 ...

その後の試みはすべて失敗します。を使用できることを知らなかったことに後で気付きました select.me <- c('v1','v2') ; df[ , select.me]。場合によってはより安全なこれらのフォームを使用することもできます。

df[ , names(df) %in% select.me] # logical indexing
df[ , grep(select.me, names(df) ) ]  # numeric indexing
df[ , grepl(select.me, names(df) ) ]  # logical indexing

これらのいずれも negation( !logical) またはマイナス ( -numeric) で使用して補数を取得できますが、否定で文字インデックスを使用することはできません。理解しやすさを 1 レベル下げて、select.me値を有効な R 式に変更したい場合は、次のようにします。

select.me <- "c('v1','v2')"
df[ , eval(parse(text=select.me)) ]

これをお勧めするわけではありません...「歩くことを学んだ」後に可能であることをお知らせするためです. 元の引用符で囲まれた文字列を使用して情報を引き出すことも可能でした (バロックではありますが) (ただし、これは最初のバージョンが優れている理由を示しているだけだと思います)。

select.me <- "'v1','v2'"
df [ , scan(textConnection(select.me), what="", sep=",") ]
> str( df [ , scan(textConnection(select.me), what="", sep=",") ] )
Read 2 items
'data.frame':   100 obs. of  2 variables:
 $ v1: num  -0.3347 0.2113 0.9775 -0.0151 -1.8544 ...
 $ v2: num  -1.396 -0.95 -1.254 0.822 0.141 ...
于 2012-11-30T01:13:22.513 に答える
10

これは基本的なsytnaxであり、おそらく入門マニュアルRを読む必要があります

select.me <- c('v1','v2')
df[,select.me]
于 2012-11-30T01:10:56.837 に答える