Um herauszufinden, ob eine Spalte im Datenrahmen vorhanden ist oder nicht

110

Ich habe einen data.frame mit dem Namen "abcframe"

     a  b  c
     1  1  1
     2  2  3

Wie kann ich feststellen, ob in einem bestimmten Datenrahmen eine Spalte vorhanden ist oder nicht? Zum Beispiel möchte ich herausfinden, ob eine Spalte d im data.frame abcframe vorhanden ist .

Sonnig Sonnig
quelle
1
Möchten Sie wissen, ob Ihr Datenrahmen eine Spalte mit dem Namen hat d, oder möchten Sie wissen, ob ein bestimmter Vektor deiner der Spalten Ihres Datenrahmens entspricht?
Ich möchte wissen, ob Dataframe eine Spalte mit dem Namen d hat oder nicht
Sunny Sunny
Wünsche dir einen schönen sonnigen Tag mit 100 Stimmen! :-)
TMS

Antworten:

196

Angenommen, der Name Ihres Datenrahmens lautet datund der zu überprüfende Spaltenname lautet "d", können Sie den %in%Operator verwenden:

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

quelle
6
Wenn Sie umgekehrt schauen, dh wenn die Spalte nicht vorhanden ist, fügen Sie einfach !am Anfang hinzu:if(!"d"%in% colnames(dat))
toto_tico
Tolle Antwort. Wie kann ich das erweitern, wenn ich nach den Spalten 'd' und 'e' und 'f' suchen möchte? Wäre das : if("d" & "e" & "f" %in% colnames(dat)) { cat("Yep, it's in there!\n"); }. Vielen Dank! - Oh, ich habe die Antwort vielleicht selbst gefunden: stackoverflow.com/questions/21770912/… .
Sander W. van der Laan
6
all (c ("d", "e", "f")% in% colnames (dat))
skan
24

Sie haben eine Reihe von Optionen, einschließlich der Verwendung von %in%und 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

So erhalten Sie die Namen der Spalten:

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

Verwenden Sie %in%diese Option, um die Mitgliedschaft zu überprüfen:

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

Or use `grepl` to check for a match:

grepl("d", names(dat))
[1] FALSE FALSE FALSE
Andrie
quelle
11
Um das grepletwas genauer zu machen, können Sie verwenden grepl("^d$",names(dat)), um sicherzustellen, dass eine Spalte mit Namen ddnicht zurückgegeben wird TRUE.
BenBarnes
Danke dafür, colnameshat bei mir nicht funktioniert, aber namesfunktioniert.
Docconcoct
@Andrie gibt es eine Möglichkeit, die Spalten mit zwei großen Datenrahmen zu vergleichen, um festzustellen, welche Spaltennamen in der anderen Spalte fehlen?
sar
8

Sie könnten verwenden any:

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

Sie können auch if(!is.null(abcframe$d))testen, ob in dvorhanden ist 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
quelle
2
Interessanterweise schlägt dies mit dem tidyverse tibble fehl, da das 'dat $ d' eine Warnung auslöst.
Miratrix