2012-04-27 8 views
8

別のデータフレームの下部に追加するのが難しいです。別のデータフレームの末尾に1つのデータフレームを追加するR

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

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

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

これがDF2は、次のようになります。DF1があるという値の#(実際のデータポイントの数であると考えられる

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> 

)を可能な値の合計数で割ったものです。

SO ..私はこのように見てDF2の底にDF1を追加したい:

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の最初の行です。私はそれが最後の行であることが必要です。私は、マージを試みた

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に新しい行を追加し、値に下塗り試してみた:

私は

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

を使用してみました、私はエラーを取得しますDF2..nothingは動作するようです!私はいくつかの助けが絶望的に​​必要です!誰でも?

+0

短い答えは、あなたができない(あるいは、少なくともあなたはshouldnであります't)。データフレームの列はすべて原子ベクトル(つまり同じデータ型)でなければならず、数値(DF1)と文字/因子(DF2)を混在させようとしています。 – joran

+0

DF2の列が要素ではなく文字である場合、これは「機能します」。しかし、あなたはまだこれらのデータセットをリンクするための別の方法を見つけるべきでしょう。 – joran

答えて

6

をここにあなたが何をすべきかです:

DFtranspose <- cbind(t(DF1[2, ]), t(DF2)) 
rownames(DFtranspose) <- DF1[1, ] 
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" 
関連する問題