更新:我道歉......我应该指定某些测试 缺少值(进行n次,其他进行m次),然后我我认为这会影响基于merge
documentation的答案:
all.x
逻辑;如果为TRUE,那么额外的行将被添加到输出中,一个用于x中的每一行,y中没有匹配的行。这些行将在那些通常用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数据框每个因子级别有一行,但每个测试复制的测试数据都有多个。我如何合并这些以便我为每个批次填写作文?换句话说,我的结果数据框看起来像这样:
| 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.testing
。我只是不知道(好吧,我想用for()
循环来做这件事,但我确信有更好的方法)!
答案 0 :(得分: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
这原来是一个内连接,因为合并列中没有丢失的项目,但是可以选择by.x和by.y参数,这样你就得到了一个左外层或右外层如果需要加入。如果由于某种原因你想要维护df.testing中项目的顺序,你需要创建一个随附的列,然后是order()ed-by。