2011-02-02 52 views
6

Tôi có một data.frame với một cột, như vậy:Data.frame trở thành yếu tố/vector sau khi lọc/Subsetting

>d = data.frame(animal=c("horse","dog","cat")) 

sau đó tôi lọc nó bằng cách loại trừ tất cả các mục cũng có mặt trong một vector. ví dụ:

> res = d[!(d$animal %in% c("horse")),] 
> res 
[1] dog cat 
Levels: cat dog horse 
>class(res) 
[1] "factor" 

Điều gì đang xảy ra ở đây?

+0

Cũng lưu ý rằng lớp của cột trong data.frame của bạn không phải là "ký tự", nhưng "yếu tố": 'lớp (d [[1]])'. –

Trả lời

9

Chào mừng bạn đến R. Bạn vừa bị cắn bởi drop ít phiền toái: bạn cần phải nói cho rõ ràng R không để "giảm xuống còn một chiều":

res = d[!(d$animal %in% c("horse")), , drop = FALSE] 
+0

Jeez. Ai nghĩ đó là một ý tưởng hay? –

+0

Xem bài viết R Inferno của Patrick Burns để có một cuộc thảo luận chi tiết hơn về điều này: http://lib.stat.cmu.edu/S/Spoetry/Tutor/R_inferno.pdf –

+1

Thật buồn cười, tôi đã sử dụng R cho 3 hoặc 4 năm và đây là lần đầu tiên tôi gặp phải điều này. Tôi đoán tôi thường không sử dụng 1 data.frames cột. –

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