我有两个数据框:

df1
Syllable Duration Pitch
@         0.08    93
@         0.05    107
@         0.13    56
@         0.07    95
@         0.07    123

df2
Syllable Duration
@        0.08
@        0.05
@        0.07
@        0.07

我想将它们合并到另一个数据框中:
df3
Syllable Duration Pitch
@        0.08     93
@        0.05     107
@        0.07     95
@        0.07     123

问题是我重复了Syllable和Duration值。我已经试过了这段代码,但是它给了我不正确的Pitch:
df3 <- merge(df2, df1[!duplicated(df1$Syllable),], by="Syllable")

df3
Syllable Duration Pitch
@        0.08     93
@        0.05     93
@        0.07     93
@        0.07     93

最佳答案

我建议使用dplyr软件包。如果使用它,则可以选择要作为连接依据的列。加入时,应使用semi_join而不是inner_join。区别在于inner_join保留所有组合,并可能重复行(“如果x和y之间存在多个匹配项,则返回所有匹配项组合。”)

另一方面,semi_join做到了:“半联接不同于内部联接,因为内部联接将为y的每个匹配行返回x的一行,其中半联接将永远不会重复x的行。”

对于您的情况,可以使用semi_join(df1, df2, by = c("Syllable", "Duration"))合并数据帧。 by vector 定义您要加入的列名。

这给您您想要的:

  Syllable Duration Pitch
1        @     0.08    93
2        @     0.05   107
3        @     0.07    95
4        @     0.07   123

关于r - 在R中合并具有特定条件的两个数据帧,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50698889/

10-12 14:01
查看更多