1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
test1 <- c("A","B","A","A",NA,"B","A",NA,"A")
test1.v1 <- c("B",NA,"B","B","A","B","B",NA,"A")
test2 <- c("B","B","B","B",NA,"C","C","C","C")
test2.v1 <- c("C",NA,"A","A","B","B","C",NA,"C")
test3 <- c("A","B","B","B",NA,"C","C",NA,"C")
test3.v1 <- c("B","A","B",NA,"A","A","A","A",NA)
test4 <- c(NA,"B","B","A",NA,"B","A",NA,"A")
test4.v1 <- c("B","B","B","A","A","B","B","B","B")
df1 <- data.frame(test1,test1.v1,test2,test2.v1,test3,test3.v1,test4,test4.v1)
##j'ai mis a jour les 2 vecteurs avec uniquement les noms de col de df1 pour éviter erreur dans la boucle
VEC_1 <- c("test1","test2","test3","test4") #,"test5","test6","test7","test8","test9")
VEC_2 <- c("test1.v1","test2.v1","test3.v1","test4.v1")#,"test5.v1","test6.v1","test7.v1","test8.v1","test9.v1")
df2 <- df1 ## j'initalise df2 car autrement si on fait ds la boucle df2<-df1, à chaque passage on perd les changements précédents
for (i in 1:(min(length(VEC_1), length(VEC_2)))){
df2 <- df2 %>%
mutate(
!!sym ( VEC_1[i]) := case_when(
is.na(!!sym ( VEC_1[i])) & !is.na( !!sym ( VEC_2[i])) ~ !!sym ( VEC_2[i]),
TRUE ~ !!sym ( VEC_1[i])))
}
## autrement on peut faire (la fonction cur_column() fait référence à la colonne courante ,ce qui permet d'accéder à la colonne suivante( par ex test1.vi)
df3 <-df1 %>% mutate(across(-matches("v"), ~ifelse(is.na(.) & !is.na(df1[,which(colnames(df1)==cur_column())+1]), df1[,which(colnames(df1)==cur_column())+1],.))) |
Partager