2013-04-10 41 views
6

假設你有一個數據幀稱爲數據有兩個相同的列:的R中的數據幀檢查同一列

A B 
1 1 
2 2 
3 3 
4 4 

如何檢查,如果這兩列是相同的,並返回一個邏輯值表明它?一個非常基本的僞代碼:

if(data$A == data$B) 
{ 
    print("Column A and B are identical") 
} 

我一直在瞎搞這個了一下,還沒有找到一種方法來做到這一點似乎並不令人費解不必要的。謝謝。

+0

你的列只是整數? – Arun 2013-04-10 05:47:42

+0

對不起,我應該澄清,列是字符值。 – tjnel 2013-04-10 05:49:00

回答

11

你可以使用identical

identical(DT[['A']],DT[['B']]) 
14

你可以使用all()

> data <- data.frame(A=c(1,2,3,4), B=c(1,2,3,4)) 
> all(data$A == data$B) 
[1] TRUE 
3

這可能是矯枉過正的問題,但你也可能想看看compare()從「比較」 pacakge 。請看下面的例子:

> data <- data.frame(A = c(1, 2, 3, 4), B = c(1, 2, 3, 4)) 
> compare(data[1], data[2]) ## Should be false 
FALSE [TRUE] 
> compare(data[1], data[2], ignoreNames = TRUE) # Allow different names 
TRUE 
    dropped names 
> data <- data.frame(A = c(1, 2, 3, 4), B = as.character(c(1, 2, 3, 4))) 
> str(data) ## "B" is now a factor, so use `coerce` to test for equality 
'data.frame': 4 obs. of 2 variables: 
$ A: num 1 2 3 4 
$ B: Factor w/ 4 levels "1","2","3","4": 1 2 3 4 
> compare(data[1], data[2], ignoreNames = TRUE, coerce = TRUE) 
TRUE 
    [A] coerced from <factor> to <numeric> 
    dropped names 

有一種普遍的邏輯論證,allowAll,可以設置爲TRUE允許compare功能嘗試不同的變換來測試相等。

+0

也許是過度殺傷。但好用的功能! – Arun 2013-04-10 07:57:04