我是R的初学者,我想基于ID列将两个数据集合并在一起。如果数据集1中存在数据集2的ID号,那么我希望将数据集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")
答案 0 :(得分:0)
你快到了。我稍微修改了你的例子。
df1 <- data.frame(ID = c(123, 124, 125),
category=c(3, 1, 2))
df1
df2 <- data.frame(ID = c(123, 124, NA),
score = c(0.24, 0.83, 0.35),
category = c(3, 1, 2))
df2
df2$match <- 1
df2
data <- merge(df1, df2, by = c("ID", "category") , all.x = TRUE)
data$match[is.na(data$match)] <- 0
data
答案 1 :(得分:0)
如果您可以为您提供的数据提供适当的结果,我可以根据需要进行更新。但是,您可以通过以下步骤在df2中标记与df1匹配的基于ID的ID。
更新:看起来您只想显示x值而不是y值。通过调用all.x =T
data <- merge(df1, df2, by = c('ID', 'category') , all.x = T)
data$match <- ifelse(data$ID %in% df2$ID, 1, 0)
输出
ID category score match
1 123 3 0.24 1
2 124 1 0.83 1
3 125 2 <NA> 0
数据
df1 <- data.frame(ID=c("123","124","125"), category=c(3,1,2))
df2 <- data.frame(ID=c("123","124","126"), score= c("0.24","0.83","0.92"),
category=c(3,1,2))