【问题标题】:creating new dataframe with matching ids in two different table that do not match在两个不匹配的不同表中创建具有匹配 id 的新数据框
【发布时间】:2012-05-28 12:46:54
【问题描述】:

我正在尝试合并两个带有 id 的数据框,我想先合并所有匹配的 id,然后找到不匹配的,我找到了可以合并公共 id 的合并函数。例如:

m1 = merge(df1, df2, by=c("id"))

现在我正在尝试创建一个新的数据框,其 id 的数据框 2 与数据框 1 不匹配。

您能告诉我应该寻找哪个命令吗?

例如:

我有以下两个数据集:

df1 df2

我正在尝试使用 df2 中的 df1 中没有的 id 创建一个新数据框。例如 df2 中的 id = "a3" 和 "c3"。

我的样本数据:

    df1 =data.frame(id= c("a1","a2","b1","b2","c1","c2"), value= 1:6)
df2 =data.frame(id= c("a1","a2","a3","b1","c1","c3"), value= 7:12)

非常感谢,阿扬

【问题讨论】:

    标签: r merge dataframe


    【解决方案1】:

    如果你想使用merge,这里有一种方法:

    df_merged <- merge(df2, df1, by.x="id", by.y="id", all.x=TRUE)
    df_merged[is.na(df_merged$value.y),]
      id value.x value.y
    3 a3       9      NA
    6 c3      12      NA
    

    由于您的列名在 data.frames 相同且 merge 由通用列名合并,因此您必须明确告诉函数您要使用的列名,此处为 id

    但是你应该问问自己是否真的想在这里合并?如果你只想要df2 中那些不在df1 中的行,为什么不使用这样的东西呢?

    df2[!(df2$id %in% df1$id), ]
      id value
    3 a3     9
    6 c3    12
    

    【讨论】:

    • 非常感谢,这正是我想要做的。你是对的,合并命令不适合我想做的事情,%in% 正是我想要学习的。再次感谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多