比较和匹配两个数据帧并将值存储在第三个数据帧中

时间:2020-09-15 16:34:08

标签: r

对不起,如果标题有点含糊,我将尽力解释我的问题。

我目前有两个数据框,想比较两个数据框中的值。

例如,假设两者完全相同。

df1<- data.frame("a" = c(1,2,3,4), "b" = c(123,41,51,25), "c" = c("apple", "pear","banana","peach"))

df2<- data.frame("a" = c(1,2,3,4), "b" = c(123,41,51,25), "c" = c("apple", "pear","banana","peach"))

我希望使第三个数据框具有相同的列名a,b,c,但如果行匹配,则为0、1。看起来像

df3 <- data.frame("a" = c(1,1,1,1), "b" = c(1,1,1,1), "c", c(1,1,1,1))

到目前为止我已经尝试过

for (i in colname(df1)){ df3$1 = ifelse(df1[[i]]==df2[[2]],1, 0)}

但它似乎不起作用。我认为我的问题是使用df3$i,但我也尝试过df3[[i]]。理想情况下,我希望它也可以在更大的数据帧上工作。任何帮助将不胜感激。谢谢

2 个答案:

答案 0 :(得分:1)

如果我们需要创建一个二进制数据集,只需执行==并使用(+)将逻辑强制转换为二进制。 TRUE / FALSE否则为1/0

+(df1 == df2)

如果我们想对for循环执行相同的操作(实际上并不需要ifelse

for(i in seq_along(df1)) df3[[i]] <- ifelse(df1[[i]] == df2[[i]], 1, 0)

答案 1 :(得分:0)

也许一个选择是:

#Code
df3 <- data.frame(df1==df2)
df3 <- as.data.frame(sapply(df3,as.numeric))

输出:

  a b c
1 1 1 1
2 1 1 1
3 1 1 1
4 1 1 1