my.data.frame <- subset(data , V1 > 2 | V2 < 4)
Une solution alternative qui imite le comportement de cette fonction et serait plus appropriée pour l'inclusion dans un corps de fonction:
new.data <- data[ which( data$V1 > 2 | data$V2 < 4) , ]
Certaines personnes critiquent l'utilisation de which
comme non nécessaire, mais cela empêche les NA
valeurs de rejeter des résultats indésirables. L'équivalent (.ie ne renvoyant pas de lignes NA pour les NA en V1 ou V2) aux deux options présentées ci-dessus sans le which
serait:
new.data <- data[ !is.na(data$V1 | data$V2) & ( data$V1 > 2 | data$V2 < 4) , ]
Remarque: je tiens à remercier le contributeur anonyme qui a tenté de corriger l'erreur dans le code immédiatement ci-dessus, un correctif qui a été rejeté par les modérateurs. Il y avait en fait une erreur supplémentaire que j'ai remarquée en corrigeant la première. La clause conditionnelle qui vérifie les valeurs NA doit être la première si elle doit être traitée comme je l'avais prévu, puisque ...
> NA & 1
[1] NA
> 0 & NA
[1] FALSE
L'ordre des arguments peut avoir une importance lors de l'utilisation de «&».
[
il faut encapsulerwhich
ou utiliser des!is.na
contraintes supplémentaires .which
. Si les deux V1 et V2 sont NA, vous obtiendrez une ligne de NA à cette position si vous omettiez lewhich
. Je travaille avec de grands ensembles de données et même un pourcentage relativement faible de NA remplira vraiment mon écran avec une sortie indésirable. Certaines personnes pensent que c'est une fonctionnalité. Je ne.grepl
ougrep
avec ceci pour faire également une correspondance de modèle pour les lignes souhaitées, en plus de ces conditions?Vous recherchez "|." Voir http://cran.r-project.org/doc/manuals/R-intro.html#Logical-vectors
la source
NA
s dans un dataframe:vc <- data.frame(duzey=factor(c("Y","O","Y","D","Y","Y","O"), levels=c("D","O","Y"), ordered=TRUE), cinsiyet=c("E","E","K",NA,"K","E","K"), yas=c(8,3,9,NA,7,NA,6), Not=c(NA,1,1,NA,NA,2,1)); vc; vc[vc$cinsiyet == "E" | vc$Not < 4,]; vc[vc$cinsiyet == "E" & vc$Not < 2,]
Dans un souci d'exhaustivité, nous pouvons utiliser les opérateurs
[
et[[
:Plusieurs options
df $ name est équivalent à df [["name", exact = FALSE]]
Utilisation
dplyr
:Utilisation
sqldf
:Sortie pour les options ci-dessus:
la source
sqldf
paquet est trop bon. Très pratique surtout quandsubset()