1046 Stimmen

Spalten des Datenrahmens nach Namen löschen

Ich habe eine Reihe von Spalten, die ich aus einem Datenrahmen entfernen möchte. Ich weiß, dass wir sie einzeln mit etwas wie löschen können:

df$x <- NULL

Aber ich hatte gehofft, dies mit weniger Befehlen erreichen zu können.

Ich weiß auch, dass ich Spalten mit Integer-Indexierung wie diese löschen könnte:

df <- df[ -c(1, 3:6, 12) ]

Ich bin jedoch besorgt, dass sich die relative Position meiner Variablen ändern könnte.

In Anbetracht der Leistungsfähigkeit von R dachte ich mir, dass es einen besseren Weg geben könnte, als jede Spalte einzeln zu löschen.

11voto

sbha Punkte 8288

Jenseits von select(-one_of(drop_col_names)) wie in früheren Antworten dargelegt, gibt es eine Reihe weiterer dplyr Optionen für das Fallenlassen von Spalten mit select() die nicht die Definition aller spezifischen Spaltennamen erfordern (unter Verwendung der dplyr starwars-Beispieldaten für eine gewisse Vielfalt bei den Spaltennamen):

library(dplyr)
starwars %>% 
  select(-(name:mass)) %>%        # the range of columns from 'name' to 'mass'
  select(-contains('color')) %>%  # any column name that contains 'color'
  select(-starts_with('bi')) %>%  # any column name that starts with 'bi'
  select(-ends_with('er')) %>%    # any column name that ends with 'er'
  select(-matches('^f.+s$')) %>%  # any column name matching the regex pattern
  select_if(~!is.list(.)) %>%     # not by column name but by data type
  head(2)

# A tibble: 2 x 2
homeworld species
  <chr>     <chr>  
1 Tatooine  Human  
2 Tatooine  Droid 

Wenn Sie eine Spalte löschen müssen, die im Datenrahmen vorhanden sein kann oder auch nicht, gibt es eine kleine Abwandlung mit select_if() dass im Gegensatz zur Verwendung von one_of() wird nicht zu einer Unknown columns: Warnung, wenn der Spaltenname nicht existiert. In diesem Beispiel ist "bad_column" keine Spalte im Datenrahmen:

starwars %>% 
  select_if(!names(.) %in% c('height', 'mass', 'bad_column'))

10voto

Nick Keramaris Punkte 357

Eine andere Lösung, wenn Sie die von @hadley oben beschriebene nicht verwenden wollen: Wenn "COLUMN_NAME" der Name der Spalte ist, die Sie löschen möchten:

df[,-which(names(df) == "COLUMN_NAME")]

7voto

Cybernetic Punkte 10978

Geben Sie die Datenrahmen und eine Kette von kommagetrennte Namen zu entfernen:

remove_features <- function(df, features) {
  rem_vec <- unlist(strsplit(features, ', '))
  res <- df[,!(names(df) %in% rem_vec)]
  return(res)
}

Verwendung :

remove_features(iris, "Sepal.Length, Petal.Width")

enter image description here

5voto

Md. Sahidul Islam Punkte 534

Es gibt viele Möglichkeiten, die Sie nutzen können...

Option-1:

df[ , -which(names(df) %in% c("name1","name2"))]

Option-2:

df[!names(df) %in% c("name1", "name2")]

Option 3:

subset(df, select=-c(name1,name2))

2voto

Rupesh Kumar Punkte 133

Spalten nach Spaltennamen im Datenrahmen löschen und löschen.

A <- df[ , c("Name","Name1","Name2","Name3")]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X