1

更新:申し訳ありません...一部のテスト(n回実施されたもの、m回実施されたもの)に欠損値があることを指定する必要がありmergeドキュメントに基づいて回答に影響を与えると考えています:

all.x 論理的; TRUE の場合、追加の行が出力に追加されます。y に一致する行がない x の行ごとに 1 つずつ追加されます。これらの行は、通常は y の値で埋められる列に NA を持ちます。デフォルトは FALSE で、x と y の両方からのデータを含む行のみが出力に含まれます。

これらのオプションはどちらも必要ありません。つまり、一致する行/列の値だけを保持したくないし、一致しない行/列の交差値に NA を入力したくありません。


実験からのデータがあり、化学組成をあるファイルに保存し、別のファイルにテストを保存しました。これらをマージして、構成因子レベルでファセットされた箱ひげ図をプロットできるようにしたいのですが、その方法を理解するのに苦労しています。以下はデータの例です (上記に従って調整されています)。

set.seed(1)
df.ids <- data.frame(lot=c("A","B","C"),
                     var1=c(1,2,3),
                     var2=c(4,5,6))

df.testing <- data.frame(lot=c(rep("A",4), rep("B",4),rep("C",4)),
                         test1=rep(c(runif(3,min=1,max=5),NA),3),
                         test2=rep(c(runif(2,min=1,max=5),NA,NA),3),
                         test3=rep(runif(4,min=1,max=5),3))

私の実際のデータと同様に、ids データ フレームには因子レベルごとに 1 つの行がありますが、テスト データにはテストの複製ごとに複数の行があります。これらをマージして、各ロットの構成を埋めるにはどうすればよいですか? つまり、結果のデータ フレームは次のようになります。

| lot |    test1 | test2    |    test3 | var1 | var2 |
|-----+----------+----------+----------+------+------|
| A   | 2.062035 | 4.632831 | 4.593559 | 1    | 4    |
| A   | 2.488496 | 1.806728 | 4.778701 | 1    | 4    |
| A   | 3.291413 | NA       | 3.643191 | 1    | 4    |
| A   |       NA | NA       | 3.516456 | 1    | 4    |
| B   | 2.062035 | 4.632831 | 4.593559 | 2    | 5    |
| B   | 2.488496 | 1.806728 | 4.778701 | 2    | 5    |
| B   | 3.291413 | NA       | 3.643191 | 2    | 5    |
| B   |       NA | NA       | 3.516456 | 2    | 5    |
| C   | 2.062035 | 4.632831 | 4.593559 | 3    | 6    |
| C   | 2.488496 | 1.806728 | 4.778701 | 3    | 6    |
| C   | 3.291413 | NA       | 3.643191 | 3    | 6    |
| C   |       NA | NA       | 3.516456 | 3    | 6    |

最後に、私がやろうとしているのは、一意のロット ID を照合しdf.ids、各列の値を に複製することだけだと思いますdf.testingfor()方法がわかりません(まあ、ループでやろうと思ったのですが、もっと良い方法があるはずです)!

4

1 に答える 1

2

列の順序を並べ替えることができます:

> merge(df.ids, df.testing)
  lot var1 var2    test1    test2
1   A    1    4 3.389578 11.55608
2   A    1    4 9.502077 15.47929
3   A    1    4 9.173870 17.18321
4   B    2    5 4.349115 12.85377
5   B    2    5 2.815137 14.45693
6   B    2    5 6.947180 17.45857
7   C    3    6 9.085507 17.92857
8   C    3    6 6.155680 12.58901
9   C    3    6 6.662026 19.92715

> merge(df.ids, df.testing)[c(1,4:5,2:3)]
  lot    test1    test2 var1 var2
1   A 3.389578 11.55608    1    4
2   A 9.502077 15.47929    1    4
3   A 9.173870 17.18321    1    4
4   B 4.349115 12.85377    2    5
5   B 2.815137 14.45693    2    5
6   B 6.947180 17.45857    2    5
7   C 9.085507 17.92857    3    6
8   C 6.155680 12.58901    3    6  
9   C 6.662026 19.92715    3    6

merge-by 列に欠落項目がないため、これは内部結合であることがわかりますが、by.x および by.y パラメーターを選択できるため、必要に応じて左外部結合または右外部結合を取得できます。 . 何らかの理由で df.testing 内の項目の順序を維持したい場合は、引き継がれる列を作成する必要があり、それが order()ed-by になります。

于 2012-08-30T22:35:40.433 に答える