web-dev-qa-db-ja.com

Rのヘッダーを持つ空のデータフレームに行を追加するにはどうすればよいですか?

可能性のある複製:
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行を追加した後、列名が変更されます。新しい行データをデータフレームに追加するにはどうすればよいですか?

35

ゼロ行_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.table_関数rbindlistを使用すると、チェックが少なくなり、最初のdata.frameの名前が保持されます。

_library(data.table)
rbindlist(list(compData, as.list(c(5,443))
_
28
mnel

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

compData <- data.frame(A= numeric(0), B= numeric(0))
compData
compData[nrow(compData)+1, ] <- c(5, 443)
compData
17
Colnames <- names(compData)
compData <- rbind(compData, c(5, 443))
names(compData) <- Colnames
5
Maiasaura

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

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
3
Marius

同じタイプのデータがある場合は、次を実行できます。

  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)))

*同じタイプのデータがある場合、それらをマトリックスに保持することもできます。

2
srctaha

関数structure.Names引数とともに使用できます。

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

#  A   B
#1 5 443
2
Sven Hohenstein