繁体   English   中英

根据条件合并r中的数据并创建一个新列

[英]Merge data in r based on conditions and creating a new column

我是R的初学者,我想根据ID列将两个数据集合并在一起。 如果数据集2中存在数据集2的ID号,那么我希望将数据集2中该特定行的数据添加到数据集1中的行。

其次,如果有匹配项,我想在该特定行/匹配项的新列中将“ 1”放在匹配项中,如果没有匹配项,则在“ 0”中放入“ 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")

你快到了 我已经稍微修改了您的示例。

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

如果您可以为所提供的数据提供适当的结果,则可以根据需要进行更新。 但是,您可以通过以下步骤标记df2中与df1中匹配的基于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))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM