首页 > 解决方案 > 如何使用 if else 语句根据 str 值在 r 数据框中创建新列?

问题描述

给定输入到条件语句中的输入值,我想添加一个包含 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的新手。

标签: rdataframeconditional-statements

解决方案


你需要这样的代码:

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')

推荐阅读