调查(行)的受访者将在四列之一中给出一种颜色作为答案。其他三列的值为“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)
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
上午1 | am2 | am3 | am4 | 选择_颜色 |
---|---|---|---|---|
蓝色 | 无 | 无 | 无 | 蓝色 |
蓝色 | 无 | 无 | 无 | 蓝色 |
无 | 红色 | 无 | 无 | 红色 |
无 | 无 | 紫色 | 无 | 无 |
无 | 无 | 紫色 | 无 | 无 |
无 | 红色 | 无 | 无 | 无 |
蓝色 | 无 | 无 | 无 | 蓝色 |
无 | 无 | 无 | 绿色 | 无 |
如果只有一种选择的颜色,您可以使用 apply 和 setdiff:
mydata$chosen_colour <- apply(mydata, 1, \(x) setdiff(x, "none"))