1

如果我有两个简单的数据框:

a <- 1:10
b <- c("a","b","c","d","e","f","g","h","i","j")
df1 <-data.frame(a,b)

c <- 1:7
d <- c("k","l","m","n","o","p","q")
df2 <-data.frame(c,d)

...我想分别使用 df1 和 df2 将它们合并为“a”和“c”:

df3= merge(df1, df2, by.x = "a", by.y = "c")

我将如何在 df1 中生成未合并的行数据框?例如:

    a b
8   8 h
9   9 i
10 10 j

任何帮助将不胜感激。

编辑使用评论中的建议,我可以这样做:

check = setdiff(df1$a, df2$c)

这很好,因为我得到 8:10 是正确的,但我确实需要 df1 中列出的另一列......这也可以用 setdiff 完成吗?

4

2 回答 2

3

查找all论据。

df3= merge(df1, df2, by.x = "a", by.y = "c", all.x = TRUE)

将返回这个。现在您可以过滤 d 以获取您要查找的条目。

    a b    d
1   1 a    k
2   2 b    l
3   3 c    m
4   4 d    n
5   5 e    o
6   6 f    p
7   7 g    q
8   8 h <NA>
9   9 i <NA>
10 10 j <NA>
于 2013-09-26T10:27:44.437 回答
0

根据评论:

check = setdiff(df1$a, df2$c)

alldiff <- df1[1:dim(df1)[1] %in% check,]

(请注意,这dim(df1)[1]与 相同length(df1$a)

归功于 Codoremifa 的第二行。

于 2013-09-26T13:23:03.590 回答