Untuk mengetahui apakah kolom ada dalam bingkai data atau tidak


110

Saya memiliki data.frame dengan nama "abcframe"

     a  b  c
     1  1  1
     2  2  3

Bagaimana cara mengetahui apakah kolom ada atau tidak dalam bingkai data tertentu? Misalnya, saya ingin mencari tahu apakah kolom d ada di data.frame abcframe .


1
Apakah Anda ingin tahu apakah bingkai data Anda memiliki kolom dengan nama d, atau Anda ingin tahu apakah suatu vektor dsama dengan salah satu kolom bingkai data Anda?

saya ingin tahu apakah dataframe memiliki kolom dengan nama d atau tidak
Sunny Sunny

Semoga hari Anda cerah dengan 100 suara! :-)
TMS

Jawaban:


196

Dengan asumsi bahwa nama frame data Anda adalah datdan nama kolom yang akan diperiksa adalah "d", Anda dapat menggunakan %in%operator:

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

6
jika Anda melihat kebalikannya, yaitu jika kolom tidak ada, tambahkan saja !di awal:if(!"d"%in% colnames(dat))
toto_tico

Jawaban yang luar biasa. Bagaimana cara memperpanjang ini jika saya mencari kolom 'd' dan 'e' dan 'f'? Apakah itu: if("d" & "e" & "f" %in% colnames(dat)) { cat("Yep, it's in there!\n"); }. Terima kasih! - Oh, saya mungkin telah menemukan jawabannya sendiri: stackoverflow.com/questions/21770912/… .
Sander W. van der Laan

6
semua (c ("d", "e", "f")% dalam% colnames (dat))
skan

24

Anda memiliki sejumlah opsi, termasuk menggunakan %in%dan 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

Untuk mendapatkan nama kolom:

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

Gunakan %in%untuk memeriksa keanggotaan:

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

Or use `grepl` to check for a match:

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

11
Untuk mendapatkan yang grepllebih tepat, Anda bisa menggunakan grepl("^d$",names(dat)), untuk memastikan bahwa kolom dengan nama ddtidak kembali TRUE.
BenBarnes

Terima kasih untuk ini, colnamestidak berhasil untuk saya tetapi namesberhasil.
Docconcoct

@ Andrie adakah cara untuk membandingkan kolom dengan dua dataframe besar untuk melihat nama kolom mana yang hilang dari kolom lain?
sar

8

Anda bisa menggunakan any:

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

2

Anda juga bisa menggunakan if(!is.null(abcframe$d))untuk menguji apakah dada di 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
Menariknya ini gagal dengan tibble tidyverse, karena 'dat $ d' akan mengeluarkan peringatan.
miratrix
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.