studio seleccionar observaciones filas eliminar elementos datos data columnas columna agregar r filter merge rows na

seleccionar - Cómo eliminar filas de un marco de datos que contiene n*NA



seleccionar datos en r (4)

Tengo una serie de grandes conjuntos de datos con ~ 10 columnas y ~ 200000 filas. No todas las columnas contienen valores para cada fila, aunque al menos una columna debe contener un valor para que la fila esté presente, me gustaría establecer un umbral para cuántas NA están permitidas en una fila.

Mi Dataframe se parece a esto:

ID q r s t u v w x y z A 1 5 NA 3 8 9 NA 8 6 4 B 5 NA 4 6 1 9 7 4 9 3 C NA 9 4 NA 4 8 4 NA 5 NA D 2 2 6 8 4 NA 3 7 1 32

Y me gustaría poder eliminar las filas que contienen más de 2 celdas que contienen NA para obtener

ID q r s t u v w x y z A 1 5 NA 3 8 9 NA 8 6 4 B 5 NA 4 6 1 9 7 4 9 3 D 2 2 6 8 4 NA 3 7 1 32

complete.cases elimina todas las filas que contienen NA , y sé que se pueden eliminar las filas que contienen NA en ciertas columnas, pero ¿hay alguna manera de modificarlo para que no sea específico sobre qué columnas contienen NA , pero cuántas del total ¿hacer?

Alternativamente, este marco de datos se genera combinando varios marcos de datos utilizando

file1<-read.delim("~/file1.txt") file2<-read.delim(file=args[1]) file1<-merge(file1,file2,by="chr.pos",all=TRUE)

Quizás la función de fusión podría ser alterada?

Gracias


Esto devolverá un conjunto de datos donde faltan como máximo dos valores por fila:

dfrm[ apply(dfrm, 1, function(r) sum(is.na(x)) <= 2 ) , ]


Si d es su marco de datos, intente esto:

d <- d[rowSums(is.na(d)) < 2,]


Use rowSums . Para eliminar filas de un marco de datos ( df ) que contiene precisamente n valores de NA :

df <- df[rowSums(is.na(df)) != n, ]

o para eliminar filas que contienen n o más valores de NA :

df <- df[rowSums(is.na(df)) < n, ]

en ambos casos, por supuesto, reemplazar n con el número que se requiere


Si el nombre de su data.frame es el siguiente, devolverá lo que está buscando:

keep <- rowSums(is.na(dat)) < 2 dat <- dat[keep, ]

Qué está haciendo esto:

is.na(dat) # returns a matrix of T/F # note that when adding logicals # T == 1, and F == 0 rowSums(.) # quickly computes the total per row # since your task is to identify the # rows with a certain number of NA''s rowSums(.) < 2 # for each row, determine if the sum # (which is the number of NAs) is less # than 2 or not. Returns T/F accordingly

Usamos el resultado de esta última declaración para identificar qué filas mantener. Tenga en cuenta que no es necesario almacenar realmente esta última lógica.