2012-04-23 31 views
67

Tôi có một data.frame với tên "abcframe"Để tìm xem một cột tồn tại trong khung dữ liệu hay không

 a b c 
    1 1 1 
    2 2 3 

Làm thế nào tôi có thể tìm thấy cho dù một cột tồn tại hay không trong một khung dữ liệu nhất định? Ví dụ: tôi muốn tìm xem cột d có tồn tại trong data.frame abcframe hay không.

+0

Bạn có muốn biết liệu khung dữ liệu của bạn có một cột với một tên của 'd', hoặc bạn có muốn biết liệu một vectơ đã cho hay không 'd' bằng một trong các cột của khung dữ liệu của bạn? –

+0

tôi muốn biết liệu dataframe có một cloumn với tên d hay không –

Trả lời

115

Giả sử rằng tên của khung dữ liệu của bạn là dat và tên cột của bạn để kiểm tra là "d", bạn có thể sử dụng %in% điều hành:

if("d" %in% colnames(dat)) 
{ 
    cat("Yep, it's in there!\n"); 
} 
+1

cảm ơn, bạn đã giải quyết được vấn đề của tôi. –

+2

Bạn là người đàn ông bây giờ dawg! (nói cách khác, cảm ơn bạn!) –

+2

nếu bạn đang tìm kiếm nghịch đảo, tức là nếu cột không có, chỉ cần thêm '!' ở đầu: 'if (!" d "% trong% colnames (dat))' –

19

Bạn có một số tùy chọn, trong đó có sử dụng %in%grepl :

dat <- data.frame(a=1:2, b=2:3, c=4:5) 
dat 
    a b c 
1 1 2 4 
2 2 3 5 

Để có được tên của các cột:

names(dat) 
[1] "a" "b" "c" 

Sử dụng %in% để kiểm tra các thành viên:

"d" %in% names(dat) 
[1] FALSE 

Or use `grepl` to check for a match: 

grepl("d", names(dat)) 
[1] FALSE FALSE FALSE 
+10

Để có được 'grepl' chính xác hơn một chút, bạn có thể sử dụng' grepl ("^ d $", tên (dat)) ', để đảm bảo rằng một cột có tên' dd' không trả về 'TRUE'. – BenBarnes

+0

Cảm ơn vì điều này, 'colnames' không hoạt động đối với tôi, nhưng' tên' đã làm. – Docconcoct

0

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

> names(dat) 
[1] "a" "b" "c" 
> any(names(dat) == 'b') 
[1] TRUE 
> any(names(dat) == 'B') 
[1] FALSE 
Các vấn đề liên quan