2015-05-23 18 views
5

Ich habe einen Datenrahmen bestehend aus n Spalte und einer von ihnen ist food. food Spalte mögliche Werte sind apple, tomato, cabbage, sausage, beer, vodka, potato. Ich möchte eine neue Spalte in meinem data Datenrahmen wie folgt erstellen: wenn food==apple oder food==tomato oder food==potato, dann zuweisen vegetables, sonst nur data$food Wert zuweisen.R neue Spalte basierend auf wenn sonst Bedingung

Also, wenn Datenrahmen ist wie folgt:

ID ..(some other columns).. food 

1       apple 
2       sausage 
3       tomato 
4       cabbage 
5       vodka 

dann sollte das Ergebnis wie folgt:

ID ..(some other columns).. food  category 

1       apple  vegetable 
2       sausage  sausage 
3       tomato  vegetable 
4       cabbage  vegetable 
5       vodka  vodka 

Wie kann ich das tun?

Antwort

4

Ich würde die Variable kopieren und finden, welche Zeilen entsprechen Ihrem Kriterium und ersetzen Sie die Werte nur für diese Zeilen. Ich habe auch eine neue Faktorstufe für eine saubere Buchhaltung hinzugefügt.

xy <- data.frame(food = sample(c("apple", "tomato", "cabbage", "sausage", "beer", "vodka", "potato"), 50, replace = TRUE)) 

xy$newcol <- xy$food 
levels(xy$newcol) <- c(levels(xy$newcol), "veggy") 
xy[xy$food %in% c("apple", "tomato", "potato"), "newcol"] <- "veggy" 
xy 

     food newcol 
1 apple veggy 
2 vodka vodka 
3 sausage sausage 
4 cabbage cabbage 
5 vodka vodka 
6 potato veggy 
7 cabbage cabbage 
8 cabbage cabbage 
... 
1

Sie könnten recode von car verwenden, die beide mit arbeiten Spalte ‚Zeichen‘ und ‚Faktor‘. Bei "Faktor" -Spalten werden die nicht verwendeten Ebenen gelöscht, während neue Ebenen hinzugefügt werden.

library(car) 
xy$newcol <- recode(xy$food, "c('apple', 'tomato', 'potato')='veggy'") 

HINWEIS: xy von @Roman Lustrik der Post

Wenn Sie data.table verwenden, können diese mit (Aktualisierung der gleichen Spalte) erfolgen

library(data.table) 
setkey(setDT(xy), food)[J(c('apple', 'tomato', 'potato')), food:='veggy'] 
1

Was ist das?

# df is your data frame 
veg <- c("tomato", "apple", "potato") 
df$category <- ifelse(df$food %in% veg, "vegetable", df$food) 
Verwandte Themen