我想将两个只有一个答案的变量组合成一个有两个答案的变量。
示例
IPV_YES 只有 1 的答案 IPV_NO 只有 2 个答案
我想将它们组合成一个名为 IPV 的变量,该变量将具有来自两个单独类别的 1 和 2 结果。
我尝试使用 ifelse 命令,但它只显示 IPV_YES 的值。
我有的数据集
我想要的结果
答案 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