2013-04-10 68 views
6

Giả sử bạn có một khung dữ liệu được gọi là dữ liệu với hai cột giống hệt nhau:Kiểm tra cột giống hệt nhau trong một khung dữ liệu trong R

A B 
1 1 
2 2 
3 3 
4 4 

Làm thế nào tôi có thể kiểm tra xem hai cột này là giống hệt nhau và trở một giá trị logic để chỉ ra nó? Mã giả rất cơ bản là:

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

Tôi đã rối tung một chút và không tìm ra cách để làm điều đó dường như không phức tạp một cách không cần thiết. Cảm ơn.

+0

Các cột của bạn có phải là số nguyên không? – Arun

+0

Xin lỗi tôi đã làm rõ, các cột là giá trị ký tự. – tjnel

Trả lời

11

Bạn có thể sử dụng identical

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

Bạn có thể sử dụng all():

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

Đây có thể là quá mức cần thiết cho vấn đề của bạn, nhưng bạn cũng có thể muốn xem xét compare() từ "so sánh" pacakge . Hãy xem xét các ví dụ sau:

> 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ó một lập luận logic chung, allowAll, có thể được thiết lập để TRUE cho phép compare chức năng để cố gắng biến đổi khác nhau để kiểm tra cho sự bình đẳng.

+0

Quá mức, có thể. Nhưng chức năng tiện dụng tốt đẹp! – Arun

Các vấn đề liên quan