2017-09-27 85 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列(對不起,我沒有提及),這個解決方案的代碼會變得很麻煩。 –