我正在尝试使用ifelse组合许多变量,以创建一个虚拟变量来确定某人是否属于一个职业类别。我想知道是否有一个功能可以简化此代码,并使其更容易重复进行。 例如,我的代码当前为:
occupation_blue_collar <- ifelse(occupation=="Blue Collar", T,
ifelse(occupation =="Blue Collar and Ex-Military", T,
ifelse(occupation == "Blue Collar and Non-military Government", T,
ifelse(occupation== "Blue Collar and School Student", T,
ifelse(occupation== "Blue Collar and University Student", T,
ifelse(occupation== "Blue Collar and White Collar", T,
F))))))
我必须对许多变量和许多类别执行此操作,因此我希望有一种简化方法。谢谢!
答案 0 :(得分:3)
您可以通过在测试表达式中使用ifelse
来简化stringr::str_detect
语句-
ifelse(str_detect(occupation, “Blue Collar”, TRUE, FALSE))
如果变量很多,那么dplyr::case_when
会更好-
case_when(str_detect(occupation, “Blue Collar”) ~ TRUE,
str_detect(occupation, “White Collar) ~ TRUE,
TRUE ~ FALSE)
答案 1 :(得分:1)
请参见case_when,它应该满足您的需求
library(dplyr)
mtcars %>%
mutate(cg = case_when(carb <= 3 ~ "low",
carb > 3 ~ "high"))
答案 2 :(得分:0)
function f(x, level = 0) {
console.log(level, '>>'.repeat(level + 1), x);
var v = x === 0
? 5
: 1 + f(x - 1, level + 1);
console.log(level, '<<'.repeat(level + 1), v);
return v;
}
console.log('result', f(4));
其中.as-console-wrapper { max-height: 100% !important; top: 0; }
是“或”运算符。
由于您似乎有很多重复的单词(例如“ Blue Collar”),因此应查看正则表达式以查看是否可以自动执行某些重复操作。
答案 3 :(得分:-2)
解决此问题的方法很少,但是我认为最简单的方法是在ifelse语句中使用OR逻辑
ifelse(occupation == "Blue Collar" | occupation == "Blue Collar and Ex-Military" | occupation == "Blue Collar and Non-military Government" | occupation == "Blue Collar and School Student" | occupation == "Blue Collar and University Student", "T", "F")
但是,如果您必须跨职业进行多次操作,那么还有更好的方法可以执行此操作。我将创建一个带有职业_blue_collar标头的csv,并用所需的所有可能的列填充该列。然后阅读csv,并使用
ifelse(occupation %in% df$occupations_blue_collar, "T", "F")
。冲洗并重复其他工作!
编辑:正如@markus所指出的那样,如果您要在职业[blue_collar]中使用的所有值中都带有单词“ blue衣领”,那么ifelse(grepl("blue collar", occupation), 'T', 'F')
将是处理此问题的最有效方法!要过滤掉“蓝领和白领”,您可以使用ifelse(grepl('blue collar', occupation) & occupation != 'blue collar and white collar', 't', 'f')
或ifelse(grepl('蓝领',职业)&!grepl('白领',职业),'t','f' )`
编辑2:更改||到|如@wusel建议。