r - 如何使用 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的新手。
解决方案
你需要这样的代码:
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')
推荐阅读
- python - Flask - ModuleNotFoundError,虽然它在同一个文件夹中 - 更新
- swift - 创建的 observable 不会发出任何东西
- java - 如何在不使用 response.getBody() 或 Content-length 标头参数的情况下知道响应正文的内容长度?
- c - 联合定义中的`sizeof`结构
- websocket - Akka HTTP - Websocket - 真正的双向场景
- powershell - Invoke-AzVMRunCommand 日志输出、错误处理
- selenium - 如何使用基于机器学习的算法/基于人工智能的自动化为任何损坏的图像创建测试套件
- excel - RegExp vs IRegExp2:类名混淆
- go - 带有 Postgres 的 Gorm 有一个作为 JSON 的嵌套结构
- android - 如何将 lambda 作为 Intent 的额外内容传递?