En utilisant le dataframe mtcars , comment puis-je obtenir un nouveau dataframe contenant la chaîne "3"
Jusqu'à présent, j'ai:
mtcars<-lapply(mtcars, function(x) as.character(x))
myindices<-sapply(mtcars, function(x) { grep("3",x, ignore.case = TRUE) })
Cela me donne une liste d'indices. Comment puis-je simplement obtenir un dataframe filtré à partir de l'original.
N'hésitez pas à critiquer mon approche, c'est le résultat final qui m'intéresse vraiment
5 Réponses :
Nous pouvons utiliser filter_all de dplyr . Cela renvoie un dataframe avec des lignes contenant au moins une colonne contenant la chaîne "3":
mtcars %>%
filter_all(all_vars(grepl("3", .)))
Si nous voulons un dataframe avec des lignes contenant toutes les colonnes contenant le chaîne "3". Nous utilisons all_vars au lieu de any_vars:
library(dplyr)
mtcars %>%
filter_all(any_vars(grepl("3", .)))
Nous pouvons utiliser grepl avec Réduire de base R
out <- mtcars[Reduce(`|`, lapply(mtcars, grepl, pattern = "3")),] dim(out) #[1] 31 11
Une autre solution de base R:
mtcars[apply(mtcars,1,function(x) grepl("3",paste(x,collapse=""))),]
Semblable à votre solution sapply :
mtcars[grepl("3", do.call(paste0, mtcars), fixed = T),]
Vous pouvez également le faire:
mtcars[sapply(1:nrow(mtcars), function(i) any(grepl("3", mtcars[i,], fixed = T))),]
p>
Nous pouvons utiliser toString.
rbind(mtcars=dim(mtcars), mtcars.3=dim(mtcars.3))
[,1] [,2]
mtcars 32 11
mtcars.3 31 11
Check:
mtcars.3 <- mtcars[grep("3", apply(mtcars, 1, toString)), ]
p >
Qu'essayez-vous de réaliser exactement? Trouver des lignes contenant le chiffre 3?