my.data.frame <- subset(data , V1 > 2 | V2 < 4)
Una solución alternativa que imita el comportamiento de esta función y sería más apropiada para su inclusión dentro del cuerpo de una función:
new.data <- data[ which( data$V1 > 2 | data$V2 < 4) , ]
Algunas personas critican el uso de whichcomo no necesario, pero impide que los NAvalores arrojen resultados no deseados. El equivalente (.ie no devolver filas de NA para ningún NA en V1 o V2) a las dos opciones demostradas anteriormente sin el whichsería:
new.data <- data[ !is.na(data$V1 | data$V2) & ( data$V1 > 2 | data$V2 < 4) , ]
Nota: Quiero agradecer al contribuyente anónimo que intentó corregir el error en el código inmediatamente anterior, una solución que fue rechazada por los moderadores. En realidad hubo un error adicional que noté cuando estaba corrigiendo el primero. La cláusula condicional que verifica los valores de NA debe ser primero si se va a manejar como pretendía, ya que ...
> NA & 1
[1] NA
> 0 & NA
[1] FALSE
El orden de los argumentos puede ser importante cuando se usa '& ".
[uno necesita envolverwhicho usar!is.narestricciones adicionales .which. Si tanto V1 como V2 son NA, obtendría una fila de NA en esa posición si omitiera elwhich. Trabajo con grandes conjuntos de datos e incluso un porcentaje relativamente pequeño de NA realmente llenará mi pantalla con resultados basura. Algunas personas piensan que esta es una característica. Yo no.greplogrepcon esto para también hacer coincidir patrones para las filas deseadas, además de estos condicionales?Estás buscando "|". Ver http://cran.r-project.org/doc/manuals/R-intro.html#Logical-vectors
fuente
NAs en un marco de datos: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,]Solo en aras de la integridad, podemos utilizar los operadores
[y[[:Varias opciones
df $ name es equivalente a df [["nombre", exacto = FALSO]]
Utilizando
dplyr:Utilizando
sqldf:Salida para las opciones anteriores:
fuente
sqldfpaquete es muy bueno. Muy útil, especialmente cuando sesubset()vuelve un poco doloroso :)