Aby sprawdzić, czy kolumna istnieje w ramce danych, czy nie


110

Mam plik data.frame o nazwie „abcframe”

     a  b  c
     1  1  1
     2  2  3

Jak mogę sprawdzić, czy kolumna istnieje, czy nie w danej ramce danych? Na przykład chciałbym sprawdzić, czy kolumna d istnieje w abcframe data.frame .


1
Czy chcesz wiedzieć, czy twoja ramka danych ma kolumnę o nazwie d, czy chcesz wiedzieć, czy dany wektor djest równy jednej z kolumn ramki danych?

chcę wiedzieć, czy dataframe ma cloumn o nazwie d, czy nie
Sunny Sunny

Życzę miłego słonecznego dnia ze 100 głosami! :-)
TMS

Odpowiedzi:


196

Zakładając, że nazwa twojej ramki danych to dati że nazwa twojej kolumny do sprawdzenia to "d", możesz użyć %in%operatora:

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

6
jeśli szukasz odwrotności, tj. jeśli kolumny nie ma, po prostu dodaj !na początku:if(!"d"%in% colnames(dat))
toto_tico

Świetna odpowiedź. Jak to rozszerzyć, jeśli szukałbym kolumn „d”, „e” i „f”? Byłoby to: if("d" & "e" & "f" %in% colnames(dat)) { cat("Yep, it's in there!\n"); }. Dzięki! - Och, sam mogłem znaleźć odpowiedź: stackoverflow.com/questions/21770912/… .
Sander W. van der Laan

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

24

Masz kilka opcji, w tym używanie %in%i 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

Aby uzyskać nazwy kolumn:

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

Użyj, %in%aby sprawdzić członkostwo:

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

Or use `grepl` to check for a match:

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

11
Aby uzyskać greplnieco dokładniejsze informacje, możesz użyć grepl("^d$",names(dat)), aby upewnić się, że kolumna o nazwie ddnie zwraca TRUE.
BenBarnes,

Dzięki za to, colnamesnie działa dla mnie, ale namestak.
Docconcoct,

@Andrie czy istnieje sposób na porównanie kolumn do dwóch dużych ramek danych, aby zobaczyć, których nazw kolumn brakuje w drugiej kolumnie?
sar

8

Możesz użyć any:

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

2

Możesz również użyć if(!is.null(abcframe$d))do sprawdzenia, czy distnieje w 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
Co ciekawe, nie udaje się to w przypadku tidyverse tibble, ponieważ „dat $ d” wyświetli ostrzeżenie.
miratrix
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.