1. ホーム
  2. r

data.frameから1つの列をdata.frameとして抽出するにはどうしたらいいですか?

2023-11-27 06:02:39

質問

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

as.data.frame()を使ってみましたが、2列以上の場合は結果が変わりません。1列の場合はdata.frameを返しますが、列名は保持されません。

x <- as.data.frame(df[,1])
     df[, 1]
1       1
2       2
3       3

なぜこのような挙動になるのか理解できません。私の考えでは、1列、2列、10列のいずれを抽出しても違いはないはずです。それは常にベクトル(または行列)を返すか、常に(正しい名前で)data.frameを返すはずです。

注意:これは行列に関する質問と重複していません。行列とdata.frameはRで根本的に異なるデータ型であり、dplyrで異なる動作をすることがあるからです。data.frameで動作するいくつかの回答がありますが、matrixではありません。

どのように解決するのですか?

使用方法 drop=FALSE

> x <- df[,1, drop=FALSE]
> x
   A
1 10
2 20
3 30

ドキュメントから ( ?"[" ) を見つけることができます。

drop=TRUEの場合、結果は可能な限り低い次元に強制されます。