Để tìm xem một cột có tồn tại trong khung dữ liệu hay không


110

Tôi có data.frame với tên "abcframe"

     a  b  c
     1  1  1
     2  2  3

Làm cách nào để biết cột có tồn tại hay không trong 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 abcframe data.frame hay không .


1
Bạn có muốn biết liệu khung dữ liệu của mình có một cột có tên là dhay bạn muốn biết liệu một vectơ đã cho có dbằng một trong các cột của khung dữ liệu của bạn không?

tôi muốn biết liệu khung dữ liệu có cloumn với tên d hay không
Sunny Sunny

Chúc bạn ngày Nắng đẹp với 100 lượt bình chọn! :-)
TMS

Câu trả lời:


196

Giả sử rằng tên của khung dữ liệu của bạn là datvà tên cột cần kiểm tra "d", bạn có thể sử dụng %in%toán tử:

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

6
nếu bạn đang tìm nghịch đảo, tức là nếu cột là không có, chỉ cần thêm !ngay từ đầu:if(!"d"%in% colnames(dat))
toto_tico

Câu trả lời tuyệt vời. Làm cách nào để mở rộng điều này nếu tôi đang tìm cột 'd' và 'e' và 'f'? Đó sẽ là: if("d" & "e" & "f" %in% colnames(dat)) { cat("Yep, it's in there!\n"); }. Cảm ơn! - Ồ, tôi có thể đã tự tìm ra câu trả lời: stackoverflow.com/questions/21770912/… .
Sander W. van der Laan,

6
all (c ("d", "e", "f")% in% colnames (dat))
skan

24

Bạn có một số tùy chọn, bao gồm 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

Để lấy tên của các cột:

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

Sử dụng %in%để kiểm tra tư cách 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

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

Cảm ơn vì điều này, colnameskhông làm việc cho tôi nhưng namesđã làm.
Docconcoct

@Andrie có cách nào để so sánh các cột với hai khung dữ liệu lớn để xem cột còn lại bị thiếu tên cột nào không?
sar

8

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

2

Bạn cũng có thể sử dụng if(!is.null(abcframe$d))để kiểm tra xem có dtồn tại trong abcframe.

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

if (!is.null(dat$d)) {
  print("d exists")
} else {
  print("d does not exist")
}
if (!is.null(dat$a)) {
  print("a exists")
} else {
  print("a does not exist")
}

2
Điều thú vị là điều này không thành công với mảnh ghép gọn gàng, vì 'dat $ d' sẽ đưa ra một cảnh báo.
miratrix
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.