2012-06-16 44 views
6

Tôi cố gắng để so sánh giá trị trên các hàng khung dữ liệu, và loại bỏ tất cả những người phù hợp, với điều nàyso sánh giá trị trong một hàng

dat[!dat[1]==dat[2]] 

nơi

> dat 

lợi nhuận

n1 n2 
n1 n4 
n4 n5 
n1 n3 
n4 n4 

Vì vậy, tôi muốn nó so sánh các giá trị và xóa hàng cuối cùng, vì cả hai cột đều có cùng dữ liệu. Nhưng khi tôi sử dụng đoạn mã trên, nó nói với tôi

Error in Ops.factor(left, right) : level sets of factors are different 

các str(dat) đọc

'data.frame': 5 obs. of 2 variables: 
$ V1: Factor w/ 2 levels "n1","n4": 1 1 2 1 2 
$ V2: Factor w/ 4 levels "n2","n3","n4",..: 1 3 4 2 3 
+0

Vui lòng đăng giá trị 'str (dat)' trong câu hỏi của bạn. Tôi nghi ngờ rằng 'dat' là một data.frame và bạn đã ngầm chuyển đổi các cột của bạn thành các nhân tố, chứ không phải là các vectơ ký tự. – Andrie

Trả lời

14

Tôi nghi ngờ trong việc tạo dữ liệu của bạn, bạn vô tình và chuyển đổi hoàn toàn các cột của bạn thành các yếu tố. Điều này có thể xảy ra khi bạn đọc dữ liệu từ nguồn, ví dụ: khi sử dụng read.csv hoặc read.table. Ví dụ này minh họa nó:

dat <- read.table(text=" 
n1 n2 
n1 n4 
n4 n5 
n1 n3 
n4 n4") 

str(dat) 
'data.frame': 5 obs. of 2 variables: 
$ V1: Factor w/ 2 levels "n1","n4": 1 1 2 1 2 
$ V2: Factor w/ 4 levels "n2","n3","n4",..: 1 3 4 2 3 

Biện pháp khắc phục là phải vượt qua đối số stringsAsFactors=FALSE để read.table():

dat <- read.table(text=" 
n1 n2 
n1 n4 
n4 n5 
n1 n3 
n4 n4", stringsAsFactors=FALSE) 

str(dat) 
'data.frame': 5 obs. of 2 variables: 
$ V1: chr "n1" "n1" "n4" "n1" ... 
$ V2: chr "n2" "n4" "n5" "n3" ... 

Sau đó, mã của bạn hoạt động (ngoại trừ việc tôi nghi ngờ bạn đã bỏ lỡ một dấu phẩy):

dat[!dat[1]==dat[2], ] 
    V1 V2 
1 n1 n2 
2 n1 n4 
3 n4 n5 
4 n1 n3 
2

Một giải pháp sẽ được hướng dẫn các khung dữ liệu không chuyển đổi vectơ nhân vật vào các yếu tố (sử dụng stringAsFactors=F):

x <- c('n1', 'n1', 'n4', 'n1', 'n4') 
y <- c('n2', 'n4', 'n5', 'n3', 'n4') 
df <- data.frame(x, y, stringsAsFactors=F) 
df <- df[-which(df$x == df$y), ] 

Sau khi tạo khung dữ liệu, mã sẽ loại bỏ các hàng phù hợp, tạo ra kết quả bạn muốn.

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