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 .


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

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

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

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")
}

2
Interessanterweise schlägt dies mit dem tidyverse tibble fehl, da das 'dat $ d' eine Warnung auslöst.
Miratrix
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.