【发布时间】:2019-04-05 20:55:10
【问题描述】:
我想根据前两列及其值合并两个数据框,但是,这些列中的这些值可以根据数据集在列之间切换。所以dplyr包中的merge或left_join函数看不出成对信息是一样的。
为了更好的解释,我在这里定义了两个假设的数据集:
tree.dat1 = data.frame(tree1 = factor(c(rep(33,3),rep(22,2),11)),
+ tree2 = factor(c(22,11,44,11,44,44)),
+ value = c(0.02, rep(0.03,3), rep(0.01,2)))
> tree.dat1
tree1 tree2 value
1 33 22 0.02
2 33 11 0.03
3 33 44 0.03
4 22 11 0.03
5 22 44 0.01
6 11 44 0.01
tree.dat2 = data.frame(tree1 = factor(c(rep(11,3),rep(33,2),22)),
+ tree2 = factor(c(22,33,44,22,44,44)),
+ value1 = c(rep(3,0.05),0.02,rep(0.03,2)))
> tree.dat2
tree1 tree2 value1
1 11 22 0.02
2 11 33 0.03
3 11 44 0.03
4 33 22 0.02
5 33 44 0.03
6 22 44 0.03
如您所见,前两列的成对是相同的,但是它们的顺序不同。所以我想通过在前两列中使用这些信息并在这些数据集中保留第三列来创建一个新的数据集。
所以:
> tree.dat3 = left_join(tree.dat1,tree.dat2, by = c("tree1","tree2"))
> tree.dat3
tree1 tree2 value value1
1 33 22 0.02 0.02
2 33 11 0.03 NA
3 33 44 0.03 0.03
4 22 11 0.03 NA
5 22 44 0.01 0.03
6 11 44 0.01 0.03
我最后有两个 NAs 值,但是,当我检查成对表时,我可以在 tree.dat1 数据集中看到成对的 33 - 11(或 22 - 11)的信息。
所以预期的输出是:
tree1 tree2 value value1
1 33 22 0.02 0.02
2 33 11 0.03 0.03
3 33 44 0.03 0.03
4 22 11 0.03 0.02
5 22 44 0.01 0.03
6 11 44 0.01 0.03
所以我可能正在寻找其他方法来合并两个数据框以检查成对信息而不是两列中的因子水平。因为 33 - 11 和 11 - 33 相同,但第三列的值不同。我想知道一种适合大型数据集的方法。有什么建议吗?
【问题讨论】:
-
你能显示预期的输出吗
-
我已经用预期的输出编辑了问题。