Щоб дізнатись, чи існує стовпець у кадрі даних чи ні


110

У мене є data.frame з назвою "abcframe"

     a  b  c
     1  1  1
     2  2  3

Як я можу дізнатися, чи існує стовпець у певному кадрі даних чи ні? Наприклад, я хотів би дізнатися, чи існує стовпець d у abcframe data.frame .


1
Ви хочете знати, чи є у вашому кадрі даних стовпець із назвою d, чи ви хочете знати, чи відповідає даний вектор dодному стовпчику вашого кадру даних?

Я хочу знати, чи є у фрейму даних посилання з назвою d чи ні
Сонячно Сонячно,

Бажаю приємного сонячного дня зі 100 голосами! :-)
TMS

Відповіді:


196

Якщо припустити, що назва вашого кадру даних є datі що ваше ім'я стовпця перевірити "d", ви можете скористатися %in%оператором:

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

6
якщо ви шукаєте зворотну !if(!"d"%in% colnames(dat))
сторону

Дивовижна відповідь. Як мені продовжити це, якщо я шукаю стовпці "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
Цікаво, що це не вдається з чіткою таблицею, бо 'dat $ d' буде попереджати.
miratrix
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.