R - 使用带有 str_detect 和 & 运算符的 case_when 进行变异

问题描述 投票:0回答:1

调查(行)的受访者将在四列之一中给出一种颜色作为答案。其他三列的值为“none”。我正在尝试创建一个新列来选取其中一列中的颜色

示例数据框

am1 <- c('blue', 'blue', 'none', 'none', 'none', 'none', 'blue', 'none')
am2 <- c('none', 'none', 'red', 'none','none', 'red', 'none', 'none')
am3 <- c('none', 'none', 'none', 'purple', 'purple', 'none', 'none', 'none')
am4 <- c('none', 'none', 'none', 'none', 'none', 'none', 'none', 'green')
mydata <- data.frame(am1, am2, am3, am4)

我尝试使用case_when

mydata1 <- mydata %>%mutate(chosen_colour =
case_when(
str_detect(am1, "none") ~ am2,
str_detect(am1, "none") & str_detect(am2, "none") ~ am3,
str_detect(am1, "none") & str_detect(am2, "none") & str_detect(am3, "none") ~ am4,   
TRUE ~ am1

使用 & 运算符时不起作用 - 因为 selected_colour 应该始终具有颜色作为值

上午1 am2 am3 am4 选择_颜色
蓝色 蓝色
蓝色 蓝色
红色 红色
紫色
紫色
红色
蓝色 蓝色
绿色
r stringr mutate
1个回答
0
投票

如果只有一种选择的颜色,您可以使用 apply 和 setdiff:

mydata$chosen_colour <- apply(mydata, 1, \(x) setdiff(x, "none"))
© www.soinside.com 2019 - 2024. All rights reserved.