web-dev-qa-db-ja.com

Rのデータフレームの既存の行に基づいてヘッダーを割り当てる

変換後データフレーム、既存の行に基づいて列にヘッド/名前を割り当てたいと思います。私のヘッダーは現在:

row.names   X2  X3  X4  X5  X6  X7  X8  X9  ...

私はそれを取り除き、次の行を列ヘッダーとして使用したいと思います(多くの行を入力する必要はありません)。

これに対する唯一の解決策は、データをエクスポートおよび再ロードすることです(header = Tを使用)。

44
user3166363

ここで重要なのは、最初に行をリストから外すことです。

colnames(DF) <- as.character(unlist(DF[1,]))
DF = DF[-1, ]
58
Vishnu Jayanand

これを試して:

colnames(DF) = DF[1, ] # the first row will be the header
DF = DF[-1, ]          # removing the first row.

ただし、データが適切に読み取られている場合は確認してください。 data.frameに数値変数があり、最初の行が文字の場合、すべてのデータは文字として読み取られています。この問題を回避するには、データを保存して、header = TRUEを使用して再度読み取ることをお勧めします。次の質問もご覧ください: CSVファイルを水平方向に整理して読む

Vishnuの答えと非常によく似ていますが、ラップリーを使用してすべてのデータを文字にマッピングし、それらをヘッダーとして割り当てます。これは、データが要因としてインポートされる場合に非常に役立ちます。

DF[] <- lapply(DF, as.character)
colnames(DF) <- DF[1, ]
DF <- DF[-1 ,]

多数の数値データまたは係数が必要な場合は、それらを元に戻す必要があることに注意してください。この場合、文字データフレームを保存し、必要な行を抽出して、元のデータフレームに適用するのが理にかなっている場合があります。

tempDF <- DF
tempDF[] <- lapply(DF, as.character)
colnames(DF) <- tempDF[1, ]
DF <- DF[-1 ,]
tempDF <- NULL
1
blakiseskream