如何使用if else语句基于str值在r数据框中创建新列?

时间:2019-11-21 23:33:53

标签: r dataframe conditional-statements

我想添加一列,其中包含2个值(饮料或食物),并考虑到将输入值输入到常规语句中:

参考代码:


updated_df$Item <- ifelse(updated_df$`Category Name` == c('Diet Soda', 'Diet Soda Can', 'Hydration/Sports', 'Energy', 'Flavored Noncarb', 'Juice', 'Milk', 'New Age Beverage', 'Probiotic Beverage', 'RTD Coffee', 'Soda', 'Soda Can', 'Sparkling Beverage', 'Tea', 'Vitamin Enhanced', 'Water'), 'Beverage', ifelse(updated_df$`Category Name` == c('Candy', 'Cookies', 'Crackers', 'Food', 'Gum/Mints', 'Meat Sticks', 'Nutrition Bar', 'Nuts/Trailmix', 'Pastry', 'Salty Snacks'), 'Food'))

运行此语句时出现以下错误:

Error in ifelse(updated_df$`Category Name` == c("Candy", "Cookies", "Crackers",  : 
  argument "no" is missing, with no default

任何帮助将不胜感激! R的新手。

1 个答案:

答案 0 :(得分:2)

您需要这样的代码:

df$new <- ifelse(test1, 'A', ifelse(test2, 'B', 'C'))

目前您缺少该C选项。如果只有两个类别,可以将其简化为:

df$new <- ifelse(test1, 'A', 'B')

您的下一个问题是,您正在测试类别名称是否等于这些长列表的全部,我想您想测试类别名称是否等于条目之一。您想要:

df$value %in% c('a', 'b', 'c')

因此,在您的特定情况下:

drinks <- c('Diet Soda', 'Diet Soda Can', 'Hydration/Sports', 
            'Energy', 'Flavored Noncarb', 'Juice', 'Milk', 
            'New Age Beverage', 'Probiotic Beverage', 'RTD Coffee', 
            'Soda', 'Soda Can', 'Sparkling Beverage', 'Tea', 
            'Vitamin Enhanced', 'Water')
updated_df$Item <- ifelse(updated_df$`Category Name` %in% drinks, 'Beverage', 'Food')