web-dev-qa-db-ja.com

Rで別のdata.frameの最後に1つのデータフレームを追加する

別のデータフレームの下部に追加するのが困難です。

1行5列の1つのデータフレーム(DF1と呼びましょう)があります。 50行5列の別のデータフレーム(DF2と呼ぶことにします)があります。私は両方のデータフレーム間の列が一致するように設定しました-それらは同じ列を持っています。実際、DF1はDF2に基づく計算です。

DF1は次のようになります。

   row.names     pt1     pt2     pt3     pt4
   calc          0.93    0.45    0.28    0.54

DF2は次のようになります。

   row.names     pt1     pt2     pt3     pt4
   SNP1          AA      AG      AG      AA       
   SNP2          CT      CT      TC      CC
   SNP3          GG      CG      CG     <NA>
   SNP4          AA      GG      AG      AA
   SNP5         <NA>    <NA>    <NA>    <NA>

DF1は、実際のデータポイントの数(欠落していない値の数)を可能な値の総数で割ったものです。

SO .. DF1をDF2の下部に追加して、次のようにします。

   row.names     pt1     pt2     pt3     pt4
   SNP1          AA      AG      AG      AA       
   SNP2          CT      CT      TC      CC
   SNP3          GG      CG      CG     <NA>
   SNP4          AA      GG      AG      AA
   SNP5         <NA>    <NA>    <NA>    <NA>
   calc          0.93    0.45    0.28    0.54

使ってみたところ

 both.dfs <- rbind(DF1, DF2)  # DF1 is first here

DF1はDF2の最初の行です。最後の行になる必要があります。

使ってみたところ

both.dfs <- rbind(DF2, DF1)  # DF2 is first here

エラーが発生します:

Warning messages:
1: In `[<-.factor`(`*tmp*`, iseq, value = 0.84) :
  invalid factor level, NAs generated
2: In `[<-.factor`(`*tmp*`, iseq, value = 0.84) :
  invalid factor level, NAs generated
3: In `[<-.factor`(`*tmp*`, iseq, value = 0.84) :
  invalid factor level, NAs generated
4: In `[<-.factor`(`*tmp*`, iseq, value = 0.74) :
  invalid factor level, NAs generated

私はマージを試みました、私はDF2に新しい行を追加してからDF2の値をサブバイしました。助けが必要です!誰でも?

16
Sheila

これはあなたがすべきことです:

DFtranspose <- cbind(t(DF1[2, ]), t(DF2))
rownames(DFtranspose) <- DF1[1, ]
13
42-

私はコメントに同意します。これはおそらく悪い考えですが、ここではその方法を示します。

まず第一に、リストベースのdata.frameは、このようにうまく組み合わせることはできません。データを変換したい場合は、それらを行列に変換した方がよいでしょう。データフレームの行ごとに単一のタイプを選択する必要があることに注意してください。文字にバインドされている場合、数字を数字として保持することはできません。すべてをキャラクターとして扱いたい場合は、これを試してください:

> df1 <- data.frame(pt1="a", pt2="b", row.names=1)
> rownames(df1) <- "e"
> df2 <- data.frame(letters[1:4], pt1=1:4, pt2=2:5, row.names=1)
> rbind(as.matrix(df2), as.matrix(df1))
  pt1 pt2
a "1" "2"
b "2" "3"
c "3" "4"
d "4" "5"
e "a" "b"
3
Jeff Allen

データフレームを処理している限り、rbind()を使用できます。

bothdfs <- rbind(df1, df2)

列名は自動的に保持されます。

0
Swift Arrow