6 列の R データ フレームがあり、そのうち 3 列のみを持つ新しいデータ フレームを作成したいと考えています。
データ フレームが であり、列、、df
を抽出したい場合、考えられる唯一のコマンドは次のようになります。A
B
E
data.frame(df$A,df$B,df$E)
これをもっとコンパクトに行う方法はありますか?
ベストアンサー1
列名のベクトルを使用してサブセット化できます。特に関数、パッケージ、またはアプリケーションでプログラミングする場合は、列名をオブジェクト名 (例 ) のように扱う方法よりも、この方法を強くお勧めしますsubset()
。
# data for reproducible example
# (and to avoid confusion from trying to subset `stats::df`)
df <- setNames(data.frame(as.list(1:5)), LETTERS[1:5])
# subset
df[c("A","B","E")]
カンマがないことに注意してください (つまり、 ではありませんdf[,c("A","B","C")]
)。これは、df[,"A"]
がデータ フレームではなくベクトルを返すためです。ただし、df["A"]
は常にデータ フレームを返します。
str(df["A"])
## 'data.frame': 1 obs. of 1 variable:
## $ A: int 1
str(df[,"A"]) # vector
## int 1
感謝デビッド・ドーチースdf[,"A"]
data.frameではなくvectorを返すことを指摘し、アントワーヌ・ファブリ私の当初の解決策 (下記) よりも優れた代替案 (上記) を提案していただき、ありがとうございます。
# subset (original solution--not recommended)
df[,c("A","B","E")] # returns a data.frame
df[,"A"] # returns a vector