R根据if else条件创建新列

时间:2015-05-23 09:08:26

标签: r dataframe

我的数据框由n列组成,其中一个是foodfood列可能的值为appletomatocabbagesausagebeervodkapotato 。我想在data数据框中创建一个新列,如下所示:food==applefood==tomatofood==potato,然后指定vegetables,否则只指定{{ {1}}价值。

所以,如果数据框是这样的:

data$food

然后结果如下:

ID ..(some other columns).. food

1                           apple
2                           sausage
3                           tomato
4                           cabbage
5                           vodka

我该怎么做?

3 个答案:

答案 0 :(得分:4)

我会复制变量并找到哪些行符合您的标准,并仅为这些行替换值。我还为整洁的簿记添加了一个新的因子水平。

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 :(得分:1)

您可以使用recode中的car,它可以同时使用'character'和'factor'列。对于'factor'列,在添加新级别时会删除未使用的级别。

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

注意:xy来自@Roman Lustrik的帖子

如果您使用data.table,可以使用(更新同一列)来完成此操作

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

答案 2 :(得分:1)

这个怎么样?

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