La subconjunto de marcos de datos R da como resultado misteriosas filas de NA

He estado encontrando lo que creo que es un error. No es gran cosa, pero tengo curiosidad si alguien más ha visto esto. Lamentablemente, mis datos son confidenciales, así que tengo que inventar un ejemplo y no será muy útil.

Al subconjunto de mis datos, de vez en cuando obtengo misteriosas filas de NA que no están en mi dataframe original. Incluso los nombres de fila son NA. P.EJ:

example <- data.frame("var1"=c("A", "B", "A"), "var2"=c("X", "Y", "Z")) example var1 var2 1 AX 2 BY 3 AZ 

entonces corro:

 example[example$var1=="A",] var1 var2 1 AX 3 AZ NA  

Por supuesto, el ejemplo anterior en realidad no te da esta misteriosa fila de NA; Lo estoy agregando aquí para ilustrar el problema que estoy teniendo con mis datos.

Tal vez tiene que ver con el hecho de que estoy importando mi conjunto de datos original utilizando el paquete read.xlsx de Google y luego ejecutando una remodelación de ancho a largo antes de subconjunto.

Gracias

envolver la condición en ‘que’, por ejemplo

df [que (df $ number1

Veo que esto ya fue respondido por el OP, pero como su comentario está profundamente enterrado en la sección de comentarios, aquí está mi bash de solucionar este problema (al menos con mis datos, que se comportaba de la misma manera).

En primer lugar, algunos datos de muestra:

 > df < - data.frame(name = LETTERS[1:10], number1 = 1:10, number2 = c(10:3, NA, NA)) > df name number1 number2 1 A 1 10 2 B 2 9 3 C 3 8 4 D 4 7 5 E 5 6 6 F 6 5 7 G 7 4 8 H 8 3 9 I 9 NA 10 J 10 NA 

Ahora para un filtro simple:

 > df[df$number1 < df$number2, ] name number1 number2 1 A 1 10 2 B 2 9 3 C 3 8 4 D 4 7 5 E 5 6 NA  NA NA NA.1  NA NA 

El problema aquí es que la presencia de NA s en la tercera columna hace que R reescriba toda la fila como NA . No obstante, las dimensiones del dataframe se mantienen. Aquí está mi solución, que requiere conocimiento de qué columna contiene las NA :

 > df[df$number1 < df$number2 & !is.na(df$number2), ] name number1 number2 1 A 1 10 2 B 2 9 3 C 3 8 4 D 4 7 5 E 5 6 

Tengo el mismo problema cuando uso un código similar al que publicaste. Usar el subconjunto de funciones ()

 subset(example,example$var1=="A") 

la fila NA en cambio queda excluida.

Usando dplyr:

 library(dplyr) filter(df, number1 < number2) 
  > example < - data.frame("var1"=c("A", NA, "A"), "var2"=c("X", "Y", "Z")) > example var1 var2 1 AX 2  Y 3 AZ > example[example$var1=="A",] var1 var2 1 AX NA   3 AZ 

Probablemente este debe ser el resultado que espera … Intente este bash usando qué condición antes de la condición para evitar NA

  example[which(example$var1=="A"),] var1 var2 1 AX 3 AZ 

Otra causa puede ser que obtienes la condición incorrecta, como comprobar si una columna de factor es igual a un valor que no está entre sus niveles. Me preocupó por un tiempo