0

データフレームを作成するには、次のものがあります。私の問題は、データ フレームの行名が 1,2,3,4 などではなく、[1,]、[2,]、[3,]、[4,] などとして表示されることです (出力については以下を参照)。 . 行名が通常どおりに表示されるようにこれを修正する理由と方法 (増分番号)。

Code:

df <- data.frame(id=c("id"),nobs=c("nobs"))
df <- cbind(id,nobs)
df

id と nobs は、それぞれ 5 つの数値を持つ 2 つのベクトルです...

Current output:
     id nobs
[1,]  2 3653
[2,]  4 3653
[3,]  8 1462
[4,] 10 1097
[5,] 12  732

Desired output:
   id nobs
1  2 3653
2  4 3653
3  8 1462
4 10 1097
5 12  732
4

2 に答える 2

4

2 番目のコマンドは、最初のコマンドを完全に上書きします。あなたが欲しいのは

df <- data.frame(id=id, nobs=nobs)

cbindへの入力はベクトルなので (私は推測します)、デフォルトでは行列を返します。

さらに、データフレームとして強制することもできます

df <- data.frame(cbind(id, nobs))

しかし、それはやり過ぎです。

于 2013-01-18T17:10:37.200 に答える
0

注:これらの方法のいずれかを使用することはお勧めしません。が必要な場合はdata.frame、Paulが示したように(または自分で作成したように)直接作成できます。これは、これが発生する理由を説明するためだけのものです。たとえば、を使用sapplyする場合、出力は行列になることがありますが、そのような2つの行列をバインドして、それらをとして持つことができますdata.frame

cbind( )のヘルプページから?cbind

関数cbindおよびrbindはS3汎用であり、データフレームのメソッドを備えています。少なくとも1つの引数がデータフレームで、残りがベクトルまたは行列の場合、データフレームメソッドが使用されます。

データフレームメソッド

cbindデータフレームメソッドは、data.frame(...、check.names = FALSE)の単なるラッパーです。これは、stringsAsFactors = FALSEが指定されていない限り、データフレーム引数の行列列を分割し、文字列を係数に変換することを意味します。

したがって、2つのベクトルを渡すと、のラッパーはdata.frame呼び出されません。したがって、行列を取得します。

あなたは何ができますか?1)少なくとも1つの引数を
作成して渡すことができます。2)引数を。で ラップします。 data.framecbind
cbindas.data.frame(.)

x <- 1:5
y <- 6:10
> cbind(data.frame(x), y)
  x  y
1 1  6
2 2  7
3 3  8
4 4  9
5 5 10

> as.data.frame(cbind(x,y))
  x  y
1 1  6
2 2  7
3 3  8
4 4  9
5 5 10
于 2013-01-18T17:15:19.890 に答える