2013-04-10 11 views
6

supponga di avere un frame di dati chiamata dati con due colonne identiche:Controllo di colonne identiche in un frame di dati in R

A B 
1 1 
2 2 
3 3 
4 4 

Come si può controllare se queste due colonne sono identici e tornare uno valore logico per indicarlo? Un pseudocodice molto di base è:

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

Sono stato nei guai con questo per un po 'e non ho trovato un modo per farlo che non sembra inutilmente contorto. Grazie.

+0

Le colonne sono solo numeri interi? – Arun

+0

Mi spiace, avrei dovuto chiarire, le colonne sono valori di carattere. – tjnel

risposta

11

si potrebbe usare identical

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

Si potrebbe utilizzare all():

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

Questo potrebbe essere eccessivo per il vostro problema, ma si può anche voler guardare in compare() dal pacakge "confrontare" . Prendere in considerazione i seguenti esempi:

> 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 

C'è un argomento logico generale, allowAll, che può essere impostato per TRUE per consentire la funzione compare per provare diverse trasformazioni per testare per l'uguaglianza.

+0

Overkill, forse. Ma bella funzione a portata di mano! – Arun

Problemi correlati