我正在分析某些特定位置的一些变量。这些变量的NA值应替换为相邻列中的值。我找到了一种方法,但是如果我有更多的列,那不是一种有效的方法。你能帮忙吗?
数据集:
location <- rep(c("A", "B", "C"), times = 2)
v1 <- c(11,92,NA,NA,NA,NA)
v2 <- c(NA,NA,NA,50,NA,NA)
v3 <- c(NA,NA,66,NA,NA,79)
v4 <- c(NA,NA,NA,74,23,88)
df <- data.frame(location,v1,v2,v3,v4)
我尝试了这种方法来创建一个新列,其中NA值被其他列中的值替换。
library (dplyr)
col_1 <- df %>% mutate(new_col = v1 %>% is.na %>% ifelse(v2,v1))
col_2 <- col_1 %>% mutate(new_col_1 = new_col %>% is.na %>% ifelse(v3,new_col))
col_3 <- col_2 %>% mutate(final_col = new_col_1 %>% is.na %>% ifelse(v4,new_col_1))
它可以解决问题,但是我有两个问题: 1.有什么有效的方法可以代替创建三列吗? 2.对于v3和v4或v2和v4中的某些情况,可以用多个值代替NA,我可以取这些值的平均值代替吗?怎么样? 预先感谢。
答案 0 :(得分:1)
我们可以使用coalesce
library(dplyr)
library(purrr)
df %>%
mutate(new = coalesce(!!! rlang::syms(names(.)[-1])))
或
df %>%
mutate(new = reduce(.[-1], coalesce))
# location v1 v2 v3 v4 new
#1 A 11 NA NA NA 11
#2 B 92 NA NA NA 92
#3 C NA NA 66 NA 66
#4 A NA 50 NA 74 50
#5 B NA NA NA 23 23
#6 C NA NA 79 88 79