46

重複の可能性:
R: 空のデータ フレームに行を追加すると列名が失われる

次のように、列名のみで空のデータフレームを作成しました

> compData <- data.frame(A= numeric(0), B= numeric(0))
> compData
[1] A B
<0 rows> (or 0-length row.names)
> compData <- rbind(compData,c(5,443))
> compData
  X5 X443
1  5  443

上記では、1 行を追加した後、列名が変更されます。新しい行データをデータフレームに追加するにはどうすればよいですか?

4

6 に答える 6

34

ゼロ行への追加は、すでに行を含むdata.frameへの追加とは異なる動作をしますdata.frame

から?rbind

rbind データ フレーム メソッドは、最初にゼロ列とゼロ行の引数をすべて削除します。(何も残さない場合は、最初の引数を列とともに返します。それ以外の場合は、列がゼロ行のデータ フレームです。)次に、最初のデータ フレームから列のクラスを取得し、列を (位置ではなく) 名前で照合します。 . 因子は、必要に応じてレベルが展開され (発生した因子のレベルセットのレベルの順序で)、すべてのコンポーネントが順序付き因子である場合にのみ、結果は順序付き因子になります。(最後の点が S-PLUS とは異なります。) 古いスタイルのカテゴリ (レベルを持つ整数ベクトル) は因子に昇格されます。

いくつかのオプションがあります --

最も簡単な

 compData[1, ] <- c(5, 443)

より複雑

c(5,433)または、リストまたは data.frame に強制することもできます

rbind(compData,setNames(as.list(c(5,443)), names(compData)))

また

rbind(compData,do.call(data.frame,setNames(as.list(c(5,443)), names(compData))))

しかし、この場合、あなたもそうするかもしれません

do.call(data.frame,setNames(as.list(c(5,443)), names(compData)))

data.table オプション

チェックを少なくして、最初の data.frame の名前を保持するdata.table関数を使用できます。rbindlist

library(data.table)
rbindlist(list(compData, as.list(c(5,443))
于 2012-09-27T06:47:48.927 に答える
23

私はそれを行うためのより簡単な方法を手に入れました...次のように

compData <- data.frame(A= numeric(0), B= numeric(0))
compData
compData[nrow(compData)+1, ] <- c(5, 443)
compData
于 2012-09-27T05:55:35.613 に答える
7
Colnames <- names(compData)
compData <- rbind(compData, c(5, 443))
names(compData) <- Colnames
于 2012-09-27T05:33:29.557 に答える
4

引数を指定して関数structureを使用できます。.Names

compData <- structure(rbind(compData,c(5,443)), .Names = names(compData))

#  A   B
#1 5 443
于 2012-09-27T13:13:12.090 に答える
4

インデックスでデータフレームに割り当てることができます:

compData <- data.frame(A= numeric(0), B= numeric(0))
compData
compData[1, ] <- c(5, 443)
compData

これにより、次のことが得られます。

> compData <- data.frame(A= numeric(0), B= numeric(0))
> compData
[1] A B
<0 rows> (or 0-length row.names)
> compData[1, ] <- c(5, 443)
> compData
  A   B
1 5 443
于 2012-09-27T05:22:50.010 に答える
2

同じタイプ*のデータがある場合は、次のことができます。

  1. 実際のデータ フレームを行列に変換します。
    as.matrix(compData)
  2. 新しい行を最後に追加します。
    rbind(as.matrix(compData), c(5,443))
  3. 行列をデータ フレームに変換します。
    as.data.frame(rbind(as.matrix(compData), c(5,443)))

要するに:
compData <- as.data.frame(rbind(as.matrix(compData), c(5,443)))

*同じタイプのデータがある場合は、それらをマトリックスに保持したい場合があります。

于 2012-09-27T05:46:58.943 に答える