Data.frameがあるとします:
df <- data.frame(A=c(10,20,30),B=c(11,22,33), C=c(111,222,333))
A B C
1 10 11 111
2 20 22 222
3 30 33 333
2つ(またはそれ以上)の列を選択すると、data.frameが取得されます。
x <- df[,1:2]
A B
1 10 11
2 20 22
3 30 33
これは私が欲しいものです。ただし、1つの列のみを選択すると、数値ベクトルが取得されます。
x <- df[,1]
[1] 1 2 3
2つ以上の列の結果を変更しないas.data.frame()を使用しようとしました。 1列の場合はdata.frameを返しますが、列名は保持しません。
x <- as.data.frame(df[,1])
df[, 1]
1 1
2 2
3 3
なぜこのように振る舞うのか分かりません。私の考えでは、1つ、2つ、または10の列を抽出しても違いはありません。 ITは常にベクトル(または行列)を返すか、常にdata.frameを(正しい名前で)返す必要があります。私は何が欠けていますか?ありがとう!
注:matrixとdata.frameはRでは基本的に異なるデータ型であり、dplyrでは異なる動作をする可能性があるため、これは行列に関する質問の複製ではありません。マトリックスではなくdata.frameで機能するいくつかの答えがあります。
つかいます drop=FALSE
> x <- df[,1, drop=FALSE]
> x
A
1 10
2 20
3 30
ドキュメントから( ?"["
)以下を見つけることができます。
Drop = TRUEの場合、結果は可能な限り最小の次元に強制されます。
,
を省略します。
x <- df[1]
A
1 10
2 20
3 30
?"["
のヘルプページから:
[によるインデックス付けは、アトミックベクトルに似ており、指定された要素のリストを選択します。
データフレームはリストです。列はその要素です。