superponer - ¿Cómo combinar múltiples condiciones para subconjuntos de un marco de datos usando "O"?
superponer graficas en r (3)
Solo para completar, podemos usar los operadores [
y [[
:
set.seed(1)
df <- data.frame(v1 = runif(10), v2 = letters[1:10])
Varias opciones
df[df[1] < 0.5 | df[2] == "g", ]
df[df[[1]] < 0.5 | df[[2]] == "g", ]
df[df["v1"] < 0.5 | df["v2"] == "g", ]
df $ name es equivalente a df [["nombre", exacto = FALSO]]
Usando dplyr
:
library(dplyr)
filter(df, v1 < 0.5 | v2 == "g")
Usando sqldf
:
library(sqldf)
sqldf(''SELECT *
FROM df
WHERE v1 < 0.5 OR v2 = "g"'')
Salida para las opciones anteriores:
v1 v2
1 0.26550866 a
2 0.37212390 b
3 0.20168193 e
4 0.94467527 g
5 0.06178627 j
Tengo un data.frame en R. Quiero probar dos condiciones diferentes en dos columnas diferentes, pero quiero que estas condiciones sean inclusivas. Por lo tanto, me gustaría usar "O" para combinar las condiciones. He utilizado la siguiente sintaxis con mucho éxito cuando quería usar la condición "Y".
my.data.frame <- data[(data$V1 > 2) & (data$V2 < 4), ]
Pero no sé cómo usar un ''OR'' en lo anterior.
Usted está buscando "|". Ver http://cran.r-project.org/doc/manuals/R-intro.html#Logical-vectors
my.data.frame <- data[(data$V1 > 2) | (data$V2 < 4), ]
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 la inclusión dentro de un cuerpo de función:
new.data <- data[ which( data$V1 > 2 | data$V2 < 4) , ]
Algunas personas critican el uso del which
no es necesario, pero evita que los valores de NA
arrojen resultados no deseados. El equivalente (es decir, no devuelve filas NA para cualquier NA en V1 o V2) a las dos opciones demostradas anteriormente sin el which
sería:
new.data <- data[ !is.na(data$V1 | data$V2) & ( data$V1 > 2 | data$V2 < 4) , ]
Nota: Quiero agradecer al colaborador anónimo que intentó corregir el error en el código inmediatamente anterior, una solución que fue rechazada por los moderadores. Hubo un error adicional que noté cuando estaba corrigiendo el primero. La cláusula condicional que verifica los valores de NA debe ser la primera si se va a manejar como yo quería, ya que ...
> NA & 1
[1] NA
> 0 & NA
[1] FALSE
El orden de los argumentos puede importar al usar ''& ".