R中的多个if else语句[重复]
Posted
技术标签:
【中文标题】R中的多个if else语句[重复]【英文标题】:Multiple if else statements in R [duplicate] 【发布时间】:2021-03-16 02:28:20 【问题描述】:我有一个大型数据集(称为“cud1”),我想在其中添加一个新列,将多个初级健康投诉分类为更简单的健康类别(“q2.2_healthCat”)。也就是说,初级健康投诉 1、2、4 或 6 将被归类为“心理健康”(类别 1),响应 3、5、7 或 8 = 疼痛(类别 2),以及所有其他响应(9、10、 11, 12) 被归类为其他 (类别 3)。这是一个基本的数据框,可以让您有所了解:
Participant_ID <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
Primary_health_complaint <- c(3, 7, 12, 11, 3, 1, 9, 4, 6, 2)
cud1 <- data.frame(Participant_ID, Primary_health_complaint)
那么我想要一个新的专栏说:
q2.2_healthCat <- c(2, 2, 3, 3, 2, 1, 3, 1, 1, 1)
这是我的尝试(这次使用 case_when):
cud1 <- cud1 %>% mutate(q2.2_healthCat = case_when(
primary_health_complaint = c(1,2,4,6), '1',
primary_health_complaint = c(3,5,7,8), '2',
primary_health_complaint = c(9,10,11,12), '3'))
希望有人可以提供帮助!请善待,因为我是 R 新手。我查看了许多其他帖子,但无法弄清楚我做错了什么。
编辑:在这里找到解决方案case_when in mutate pipe 使用以下内容:
require(data.table) ## 1.9.2+
setDT(df)
df[a %in% c(0,1,3,4) | c == 4, g := 3L]
df[a %in% c(2,5,7) | (a==1 & b==4), g := 2L]
【问题讨论】:
永远不要在ifelse
语句中使用 <-
,无论是条件参数还是是/否参数。当您提供的“数据”不是有效的 R 语法时,很难想象这会起作用。无论如何,由于您使用的是dplyr
(请明确说明非基础包),请查看case_when
,它将大大简化您嵌套的ifelse
意图。
所以为了澄清,你是说它应该是一个 = 而不是
没有。我是说ifelse
中的 assignment 的前提是合法的,但很少真正需要。 (不过,=
可能会失败,因为它将被解释为命名参数,这不太可能匹配。)顺便说一句,require
的使用不正确,请参阅***.com/a/51263513/3358272。
【参考方案1】:
或许你可以试试下面嵌套的ifelse
within(cud, q2.2_healthCat <- ifelse(Primary_health_complaint %in% c(1, 2, 4, 6), 1, ifelse(Primary_health_complaint %in% c(3, 5, 7, 8), 2, 3)))
给了
Participant_ID Primary_health_complaint q2.2_healthCat
1 1 3 2
2 2 7 2
3 3 12 3
4 4 11 3
5 5 3 2
6 6 1 1
7 7 9 3
8 8 4 1
9 9 6 1
10 10 2 1
【讨论】:
以上是关于R中的多个if else语句[重复]的主要内容,如果未能解决你的问题,请参考以下文章
If_else 语句基于多个列,创建一个基于 R 中的真实语句数量平均的分数
为啥我不能使用正则表达式来评估 if...else 语句 [重复]
无论用户输入如何,我的基于用户输入和 if/else 语句的函数都会给出相同的输出[重复]