Чтобы узнать, существует ли столбец во фрейме данных или нет


110

У меня есть data.frame с именем abcframe

     a  b  c
     1  1  1
     2  2  3

Как я могу узнать, существует ли столбец в данном фрейме данных? Например, я хотел бы узнать, существует ли столбец d в abcframe data.frame .


1
Вы хотите знать, есть ли в вашем фрейме данных столбец с именем d, или вы хотите знать, dравен ли данный вектор одному из столбцов вашего фрейма данных?

Я хочу знать, есть ли в кадре данных облако с именем d или нет
Санни Санни,

Желаем вам приятного солнечного дня с 100 голосами! :-)
TMS

Ответы:


197

Предполагая, что имя вашего фрейма данных datи что имя столбца для проверки - это "d", вы можете использовать %in%оператор:

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

6
если вы смотрите в обратном порядке, то есть если столбца нет, просто добавьте !в начале:if(!"d"%in% colnames(dat))
toto_tico

Отличный ответ. Как мне расширить это, если я буду искать столбцы «d», «e» и «f»? Будет ли это: if("d" & "e" & "f" %in% colnames(dat)) { cat("Yep, it's in there!\n"); }. Спасибо! - О, возможно, я сам нашел ответ: stackoverflow.com/questions/21770912/… .
Sander W. van der Laan

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

24

У вас есть несколько вариантов, включая использование %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

Чтобы получить имена столбцов:

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

Используйте %in%для проверки членства:

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

Or use `grepl` to check for a match:

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

11
Чтобы получить greplболее точную информацию, вы можете использовать grepl("^d$",names(dat)), чтобы гарантировать, что столбец с именем ddне возвращается TRUE.
BenBarnes

Спасибо за это, colnamesу меня не сработало, но сработало names.
Docconcoct

@Andrie есть ли способ сравнить столбцы с двумя большими фреймами данных, чтобы увидеть, какие имена столбцов отсутствуют в другом столбце?
сар

8

Вы можете использовать any:

> names(dat)
[1] "a" "b" "c"
> any(names(dat) == 'b')
[1] TRUE
> any(names(dat) == 'B')
[1] FALSE

2

Вы также можете использовать, if(!is.null(abcframe$d))чтобы проверить, dсуществует ли в 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
Интересно, что это не удается с тибблом tidyverse, потому что 'dat $ d' выдаст предупреждение.
miratrix
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.