如何使用某些条件合并两列?

How to combine two columns using some conditions?

我知道这不是什么大问题,但我是新手。我通过合并两个数据帧获得了这个输出。每个人都有一列对应于每个活动参与者的性别。

Sex.x Sex.y
M M
F F
F M
M M
F F
M M
NA M
F F

期望的输出:两列混合在一个有“?”的列中当它们的两个值不匹配时,如果相邻单元格中有 NA,则保留唯一值。

F_Sex
M
F
?
M
F
M
M
F

我试图用 dplyr 包来做,但我只是得到这段代码。我知道我需要使用 if_else 但经过多次尝试,我什么也没有。

all_data1 <- all_data %>% unite(F_sexo, c(sexo.x, sexo.y), sep = "-", remove = TRUE)

非常感谢。

检查这个解决方案。数据分配为 df.

df %>% mutate(F_sex = case_when(Sex.x == Sex.y ~ Sex.x,
                                TRUE ~"?"))

df %>% mutate(F_sex = case_when(is.na(Sex.x) ~ Sex.y,
                                is.na(Sex.y) ~ Sex.x,
                                Sex.x == Sex.y ~ Sex.x,
                                TRUE ~"?"))

这是一个想法。首先使用 coalesce 以获得只有一个 NA 的行具有正确的性别。然后使用 ifelse 将那些具有不同性别的行更改为 ?.

请注意,如果您有一行的两列都是 NA,此解决方案将 return NA。请确保这是您想要的行为。

library(dplyr)

dat2 <- dat %>%
  mutate(Sex = coalesce(.$Sex.x, .$Sex.y)) %>%
  mutate(Sex = ifelse(Sex.x != Sex.y & !is.na(Sex.x) & !is.na(Sex.y), "?", Sex))
dat2
#   Sex.x Sex.y Sex
# 1     M     M   M
# 2     F     F   F
# 3     F     M   ?
# 4     M     M   M
# 5     F     F   F
# 6     M     M   M
# 7  <NA>     M   M
# 8     F     F   F

数据

dat <- read.table(text = "Sex.x  Sex.y 
M  M                
F  F
F  M
M  M
F  F
M  M
NA M
 F F", header = TRUE)