2013-04-10 9 views
6

Załóżmy, że masz ramka danych o nazwie dane z dwóch identycznych kolumn:Sprawdzanie identycznych kolumn w ramce danych w R

A B 
1 1 
2 2 
3 3 
4 4 

Jak mogę sprawdzić, czy te dwie kolumny są identyczne i wracają jeden wartość logiczną wskazać to? To bardzo prosty pseudokod jest:

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

I zostały aprowizacji z tym na trochę i nie znaleźli sposób, aby to zrobić, że nie wydaje niepotrzebnie zawiłe. Dzięki.

+0

Czy kolumny są po prostu liczbami całkowitymi? – Arun

+0

Przepraszam, że powinienem był wyjaśnić, kolumny są wartościami znaków. – tjnel

Odpowiedz

11

Można użyć identical

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

Można użyć all():

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

To może być przesadą dla swojego problemu, ale można też zajrzeć do compare() z "Porównaj" pacakge . Rozważmy następujące przykłady:

> 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 

Istnieje ogólna logiczny argument allowAll, które można ustawić na TRUE aby umożliwić funkcja compare aby wypróbować różne transformacje do testowania równości.

+0

Overkill, być może. Ale miła poręczna funkcja! – Arun

Powiązane problemy