2 votes

Changer la valeur de la colonne si la valeur existe dans la liste

J'ai un cadre de données R qui est structuré comme ceci :

indx <- as.factor(c('A01','A02','A03','B01','B02','B03'))
data <- runif(6,0,10)
valid <- rep(TRUE, 6)

df <- data.frame(indx, data, valid)

  indx     data valid
1  A01 6.534581  TRUE
2  A02 4.996695  TRUE
3  A03 3.328804  TRUE
4  B01 2.342048  TRUE
5  B02 9.928362  TRUE
6  B03 5.484037  TRUE

J'ai aussi une liste de indx lorsque les valeurs ne sont pas valides.

invalid_list <- as.factor(c('A02','B03'))

Comment puis-je changer la valeur de valid à être FALSE si le indx existe dans le invalid_list ?

Le résultat devrait ressembler à ceci :

  indx     data valid
1  A01 6.534581  TRUE
2  A02 4.996695  FALSE
3  A03 3.328804  TRUE
4  B01 2.342048  TRUE
5  B02 9.928362  TRUE
6  B03 5.484037  FALSE

2voto

akrun Points 148302

Nous pouvons utiliser %in% et affecter ceux qui correspondent à FALSE dans "valide".

df$valid[df$indx %in%invalid_list] <- FALSE

2voto

Paul Smith Points 406

Une solution basée sur dplyr :

library(dplyr)

df %>% 
  mutate(valid = ifelse(indx %in% invalid_list, FALSE, valid))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X