【发布时间】:2022-01-27 11:12:10
【问题描述】:
我正在处理一些调查数据,我想用另一个调查项目替换一个调查项目/列的内容,同时保留原始单元格内容。 Ex - 如果 Q2_1.x 缺失(缺失编码为 \"-99\" 或编码为 character_NA),则将 Q2_1.x 替换为 Q2_1.y。
这是我的数据示例:
ibrary(dplyr)
library(magrittr)
ibrary(readr)
org_dat <- read_table(\'ID Q2_1.x Q2_2.x Q2_1.y Q2_2.y Q14_1.x Q14_1.y Q15
1 Yes NA NA NA Sometimes NA NA
2 -99 NA No NA NA Always Yes
3 Yes NA Yes NA NA NA NA
4 -99 NA NA No NA Yes No
5 NA -99 NA NA NA Always NA
6 -99 NA NA No NA NA NA\') %>% mutate_all(as.character)
这是我想要的输出:
dat_out <- read_table(\'ID Q2_1 Q2_2 Q14_1 Q15
1 Yes NA Sometimes NA
2 No NA Always Yes
3 Yes NA NA NA
4 -99 No Yes No
5 NA -99 Always NA
6 -99 No NA NA\')
当前解决方案我知道我可以单独替换这些列中的每一个,但是我有很多列要处理,我想使用一种智能的 dplyr/grepl 方法来解决这个问题!有任何想法吗?我总是用 Q*.y 替换 Q*.x。
org_dat %>% mutate(Q2_1.x = case_when(!is.na(Q2_1.y) &
Q2_1.x == \'-99\'| is.na(Q2_1.x) ~ Q2_1.y,
TRUE ~ Q2_1.x)) %>%
mutate(Q2_2.x = case_when(!is.na(Q2_2.y) &
Q2_2.x == \'-99\'| is.na(Q2_2.x) ~ Q2_2.y,
TRUE ~ Q2_2.x)) %>%
mutate(Q14_1.x = case_when(!is.na(Q14_1.y) &
Q14_1.x == \'-99\'| is.na(Q14_1.x) ~ Q14_1.y,
TRUE ~ Q14_1.x)) %>%
rename(Q2_1 = Q2_1.x,
Q2_2 = Q2_2.x,
Q14_1 = Q14_1.x) %>%
select(-matches(\"x|y\"))
-
我无法重现您的数据。请使用 dput(org_data) 而不是 read_table
-
@GuedesBF 我将库添加到我的代码中,现在应该可以工作了!