组合两个变量以创建新变量

时间:2021-04-17 13:51:58

标签: r if-statement merge

我想将两个只有一个答案的变量组合成一个有两个答案的变量。

示例

IPV_YES 只有 1 的答案 IPV_NO 只有 2 个答案

我想将它们组合成一个名为 IPV 的变量,该变量将具有来自两个单独类别的 1 和 2 结果。

我尝试使用 ifelse 命令,但它只显示 IPV_YES 的值。

我有的数据集 Dataset

我想要的结果 Desired Outcome

4 个答案:

答案 0 :(得分:3)

我们可以在将 coalesce 转换为 '' 后使用 NA

library(dplyr)
df <- df %>%
    transmute(ID, IPV = coalesce(na_if(IPV_YES, ""), na_if(IPV_NO, ""))) %>%
    type.convert(as.is = TRUE)

数据

df <- data.frame(ID = 1:4, IPV_YES = c(1,"",1,""), IPV_NO = c("",2,"",2))

答案 1 :(得分:3)

我的回答

df %>% mutate(across(everything(), ~ifelse(. == "", NA, as.numeric(.)))) %>%
  group_by(ID) %>% 
  rowwise() %>%
  transmute(IPV = sum(c_across(everything()), na.rm = T))

# A tibble: 4 x 2
# Rowwise:  ID
     ID   IPV
  <dbl> <dbl>
1     1     1
2     2     2
3     3     1
4     4     2

数据

df <- data.frame(ID = 1:4, IPV_YES = c(1,"",1,""), IPV_NO = c("",2,"",2))

答案 2 :(得分:1)

df$IPV <- ifelse(df$IPV_YES != "", df$IPV_YES, df$IPV_NO[!df$IPV_NO==""])

这里,我们指定一个 ifelse 语句;可以这样解释:如果 df$IPV_YES 中的值 not 为空,则给出 df$IPV_YES 中的值,否则给出 df$IPV_NO 中不为空的值空白。

如果要删除 IPV_* 列:

df[,2:3] <- NULL

结果:

df
  ID IPV
1  1   1
2  2   2
3  3   1
4  4   2

数据:

df <- data.frame(ID = 1:4, IPV_YES = c(1,"",1,""), IPV_NO = c("",2,"",2))

答案 3 :(得分:1)

也许你可以试试下面的代码

replace(df, df == "", NA) %>%
  mutate(IPV = coalesce(IPV_YES, IPV_NO)) %>%
  select(ID, IPV) %>%
  type.convert(as.is = TRUE)

给出

  ID IPV
1  1   1
2  2   2
3  3   1
4  4   2
相关问题