如何使用某些条件合并两列?
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)
我知道这不是什么大问题,但我是新手。我通过合并两个数据帧获得了这个输出。每个人都有一列对应于每个活动参与者的性别。
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)