对不起,如果标题有点含糊,我将尽力解释我的问题。
我目前有两个数据框,想比较两个数据框中的值。
例如,假设两者完全相同。
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]]
。理想情况下,我希望它也可以在更大的数据帧上工作。任何帮助将不胜感激。谢谢
答案 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