27

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

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 の値をサブビングしようとしました。何も機能していないようです! どうしても助けが必要です!誰?

4

3 に答える 3

15

すべきことは次のとおりです。

DFtranspose <- cbind(t(DF1[2, ]), t(DF2))
rownames(DFtranspose) <- DF1[1, ]
于 2012-04-28T12:07:36.600 に答える
3

これはおそらく悪い考えであるというコメントに同意しますが、これを行う方法を次に示します。

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

> 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"
于 2012-04-27T22:41:15.213 に答える