如何使用 r 中的 mutate 函数将两列之间的字符串组合减少为一列?

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

不良的数据输入导致两列具有相似的数据,可以合并为一列。我有三个组和一个 NA,我想将其减少到两个组和一个 NA

x <- data.frame(
  a= c("Group 1", "Group 2", "Group 1", NA, "Group 1",NA, "Group 3", "Group 3"),
  b= c("Group 1", NA, NA, "Group 2", "Group 1", NA, NA, "Group 3")
)
x

#The combinations of the group and the desired output: 
#Group 1 + Group 1 = Group 1
#Group 2 + NA = Group 2 
# Group 1 + NA = Group 1 
#NA+NA = NA
#Group 3 + NA = Group 1
#Group 3 + Group 3= Unknown
x |> 
  dplyr::mutate(Group = case_when(a == c("Group 1")|b == c("Group 1") ~ "Group 1",
                                  a == c("Group 2")|b == c("NA") ~ "Group 2",
                                  a == c("Group 1")|b == c("NA") ~ "Group 2",
                                  a == c("NA")|b == c("NA") ~ NA,
                                  a == c("Group 3")|b == c("NA") ~ "Group 1",
                                  a == c("Group 3")|b == c("Group 3") ~ "Unknown",
  ))

结果如下,第3组+第3组应该是未知的,但被归类为第1组。

        a       b   Group
1 Group 1 Group 1 Group 1
2 Group 2    <NA> Group 2
3 Group 1    <NA> Group 1
4    <NA> Group 2    <NA>
5 Group 1 Group 1 Group 1
6    <NA>    <NA>    <NA>
7 Group 3    <NA> Unknown
8 Group 3 Group 3 Group 1

如果您能提供一些指导,我将不胜感激。

r dplyr data-manipulation mutate
1个回答
0
投票

这是您需要的吗?

x |> 
  dplyr::mutate(Group = case_when(a == "Group 1" & b == "Group 1" ~ "Group 1",
                                  a == "Group 2" & is.na(b) | is.na(a) & b == "Group 2" ~ "Group 2",
                                  a == "Group 1" & is.na(b) ~ "Group 2",
                                  is.na(a) & is.na(b) ~ NA,
                                  a == "Group 3" & is.na(b) | is.na(a) & b == "Group 3" ~ "Group 1",
                                  a == "Group 3" & b == "Group 3" ~ "Unknown",
  ))
        a       b   Group
1 Group 1 Group 1 Group 1
2 Group 2    <NA> Group 2
3 Group 1    <NA> Group 2
4    <NA> Group 2 Group 2
5 Group 1 Group 1 Group 1
6    <NA>    <NA>    <NA>
7 Group 3    <NA> Group 1
8 Group 3 Group 3 Unknown
© www.soinside.com 2019 - 2024. All rights reserved.