2013-04-10 7 views
6

Angenommen, Sie ein Datenrahmendaten mit zwei identischen Spalten genannt haben:Überprüfung auf identische Spalten in einem Datenrahmen in R

A B 
1 1 
2 2 
3 3 
4 4 

Wie kann ich überprüfen, ob diese beiden Spalten identisch sind und das Rück ein logischen Wert um es anzuzeigen? Eine sehr einfache Pseudo-Code ist:

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

Ich habe ein bisschen mit diesem Herumspielen und haben keine Möglichkeit, es zu tun gefunden, die nicht unnötig verworren scheint. Vielen Dank.

+0

Sind Ihre Spalten nur ganze Zahlen? – Arun

+0

Entschuldigung, ich hätte klarstellen sollen, die Spalten sind Zeichenwerte. – tjnel

Antwort

11

Sie identical

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

könnten Sie all() verwenden:

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

Dieser Overkill für Ihr Problem könnte sein, verwenden könnte, aber Sie können auch in compare() von der "Vergleichen" pacakge suchen . Betrachten Sie die folgenden Beispiele:

> 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 

Es gibt ein allgemeines logisches Argument ist, allowAll, die auf TRUE eingestellt werden können, die compare Funktion zu ermöglichen, verschiedene Transformationen zu versuchen, auf Gleichheit zu testen.

+0

Overkill, vielleicht. Aber nette handliche Funktion! – Arun

Verwandte Themen