2017-09-27 72 views
1

假设我们有两个数据帧,如下通过细胞比较两个dataframes细胞

one <- data.frame("a" = c("aa", "bb"), "b" = c("cc", "dd")) 

two <- data.frame("b" = c("aa", "bb"), "c" = c("ee", "ff")) 

我是数据帧“一”到数据帧“二”的每个对应的小区的每个小区比较(不使用对循环)。如果内容是相同的,我想得到一个TRUE,如果内容不相同,我想要一个FALSE。得到的dataset看起来像

Col1 Col2 

TRUE FALSE 

TRUE FALSE 

有没有办法做到这一点,而不使用循环?

感谢您的帮助!

+0

确保您的变量是字符和简单的'一个== two'会做 – Sotos

回答

0

我们可以做

as.matrix(one) == as.matrix(two) 

这是更好地使用stringsAsFactors= FALSEdata.frame呼吁避免阶级性质的元素转换为factors。通过转换为matrix,类现在是character,然后通过细胞相比,用细胞与==

+1

伟大的解决方案!谢谢! –

0

G'day !.

您需要使用identical()

one <- data.frame("a" = c("aa", "bb"), "b" = c("cc", "dd")) 

two <- data.frame("b" = c("aa", "bb"), "c" = c("ee", "ff")) 

three <- data.frame("a" = c("aa", "bb"), "b" = c("cc", "dd")) ## three is identical to one 


identical(one, two) #returns FALSE 

identical (one, three) #returns TRUE 

干杯!

+0

谢谢,但我需要的真/假的每个单元格。相同()比较整个数据帧而不是单个单元。 –

0

尝试以下操作:

result <- data.frame(Col1 = (as.character(one$a)==as.character(two$b)), 
        Col2 = (as.character(one$b)==as.character(two$c))) 

输出:

Col1 Col2 
1 TRUE FALSE 
2 TRUE FALSE 
+0

谢谢!但实际的数据集我有超过250列(对不起,我没有提及),这个解决方案的代码会变得很麻烦。 –