2012-08-23 46 views
6

Tôi đang cố gắng lọc các khung dữ liệu chỉ có một cột. kết quả trong một vector này được trả lại như vậy:Lọc các khung dữ liệu một cột

single.c <- data.frame(col1=c(1,2,3,4,5), row.names=C("r1","r2","r3","r4","r5")) 
single.c[single.c$col1 > 2,] 

[1] 3 4 5 

Những gì tôi thực sự muốn là dữ liệu trả về như nó là dành cho dataframes nhiều cột:

multi.c <- data.frame(col1=c(1,2,3,4,5), col2=c(1,2,3,4,5), row.names=c("r1","r2","r3","r4","r5")) 
multi.c[multi.c$col2 > 2,] 

    col1 col2 
r3 3 3 
r4 4 4 
r5 5 5 

tôi có thể thấy nó làm cho tinh thần để trả lại một vector nếu không có cột khác, nhưng nói chung tôi muốn xem những gì các hàng đã cho kết quả đó quá. Tại sao điều này xảy ra và có cách nào dễ dàng để giữ hình dạng khung dữ liệu trong kết quả, bao gồm cả các tên gọi?

Trả lời

10

Sử dụng đối số drop đến các chức năng chọn:

single.c[single.c$col1 > 2, ,drop=F] 

# col1 
#r3 3 
#r4 4 
#r5 5 

Từ tài liệu cho [:

thả

Đối với ma trận và mảng. Nếu TRUE kết quả bị ép buộc ở mức thấp nhất thứ nguyên có thể (xem ví dụ). Điều này chỉ hoạt động để trích xuất các phần tử , không phải để thay thế. Xem thả để biết thêm chi tiết.

+3

Cảm ơn, tôi không biết có tài liệu nào được liệt kê trong '? '[''! – MattLBeck

+2

Công cụ tuyệt vời! Tôi đã luôn luôn tự hỏi làm thế nào để có được một data.frame bằng cách trích xuất một cột duy nhất từ ​​một data.frame hiện có! Tôi đã sử dụng data.frame (col1 = multi.col $ col1, row.names = rownames (multi.col)) để làm điều tương tự! Doh! –

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