mutate - manipulacion de datos en r
Filtrar datos en R (3)
Tengo un CSV de archivo de datos que puedo cargar en R usando read.csv()
Algunos de los datos faltan, por lo que quiero reducir el marco de datos al conjunto que consiste completamente de datos no perdidos, es decir, si aparece un NULL
cualquier lugar, quiero excluir esa columna y fila del conjunto de datos filtrados.
Sé que probablemente pueda hacer esto de forma bastante simple con las operaciones incorporadas del vector R, pero no estoy muy seguro de cómo hacer esto exactamente.
Para hacer mi pregunta un poco más concreta, aquí hay una muestra rápida de los datos para que pueda ver lo que quiero hacer.
DocID Anno1 Anno7 Anno8
1 7 NULL 8
2 8 NULL 3
44 10 2 3
45 6 6 6
46 1 3 4
49 3 8 5
62 4 NULL 9
63 2 NULL 4
67 11 NULL 3
91 NULL 9 7
92 NULL 7 5
93 NULL 8 8
Entonces, dada esta entrada, necesito un código que reduzca la salida a esto.
DocID Anno8
44 3
45 6
46 4
49 5
Como Anno8
es la única columna con datos no NULL, y solo hay cuatro filas con datos no NULL.
Puede eliminar cualquier fila que contenga una falta usando na.omit (), sin embargo, eso no es lo que quiere. Además, la respuesta actualmente aceptada es incorrecta. Le da columnas completas, pero no descarta las filas que tienen uno o más valores perdidos, que es lo que se solicitó. La respuesta correcta se puede obtener como:
> a <- data.frame(a=c(1,2),b=c(NA,1), c=c(3,4))
> a
a b c
1 1 NA 3
2 2 1 4
> na.omit(a)[,colSums(is.na(a))==0]
a c
2 2 4
Para ver que la respuesta anterior es incorrecta:
> a[ ,apply(a, 2, function(z) !any(is.na(z)))]
a c
1 1 3
2 2 4
La fila 1 debe abandonarse debido a NA en la columna 2.
Si x
es su data.frame
(o matrix
), entonces
x[ ,apply(x, 2, function(z) !any(is.na(z)))]
Como su ejemplo usa NULL
, is.na(·)
será reemplazado por is.null(·)
Alternativamente, puedes mirar el subset(·)
.
a <- data.frame(a=c(1,2,0,1),b=c(NA,1,NA,1), c=c(3,4,5,1))
na.omit(a)
a b c
2 2 1 4
4 1 1 1
a[rowSums(is.na(a))==0,]
a b c
2 2 1 4
4 1 1 1
a[complete.cases(a),]
a b c
2 2 1 4
4 1 1 1