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 .

Cerah cerah
sumber
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");
}

sumber
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
Andrie
sumber
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
Tomasz Pik
sumber
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")
}
Jackson
sumber
2
Menariknya ini gagal dengan tibble tidyverse, karena 'dat $ d' akan mengeluarkan peringatan.
miratrix