【发布时间】:2016-08-16 12:55:04
【问题描述】:
我是 R 的初学者,我想根据 ID 列将两个数据集合并在一起。如果数据集 2 的 ID 号存在于数据集 1 中,那么我希望将数据集 2 中此特定行的数据添加到数据集 1 中的行中。
其次,如果有匹配项,我想在一个名为 match 的新列中为该特定行/匹配项添加一个“1”,如果没有匹配项,则为“0”。
例子:
Dataset 1:
Id category
123 3
124 1
125 2
Dataset 2:
Id score category
123 0.24 3
124 0.83 1
126 0.92 2
添加列的最终示例:
Id score category match
123 0.24 3 1
124 0.83 1 1
125 NA 1 0
126 0.92 2 1
到目前为止,我已经尝试过这个(以及其他一些组合),但这并没有给我带来好的结果:
data <- merge(df1, df2, by ="ID" , all.x = TRUE)
非常感谢任何帮助!
可重现的代码:
df1 <- data.frame(ID=c("123","124","125"), category=c(3,1,2)
df2 <- data.frame(ID=c("123","124","126"), score=("0.24","0.83","0.92"), category=c("3","1","2")
【问题讨论】:
-
你有
characterNA吗?它不应该放在引号中。显示的输入数据与可重现示例中的“df2”不匹配。要创建二进制列,只需使用%in%和as.integer -
您的示例数据具有预期的输出和可重现的代码是不一样的。你没有 id
126? -
感谢您的 cmets!很抱歉造成混乱,我在发布此内容时犯了一些错误!我已经在数据集 2 中编辑了 id 126。想法是数据集 1 中会有一些特定的 id 在数据集 2 中不存在(例如,数据集 2 中没有 id 125)。