vacio observaciones filtrar filas eliminar elementos datos data crear contar como r subset dataframe

observaciones - Filtrar filas data.frame por una condición lógica



eliminar observaciones de un data frame en r (5)

Quiero filtrar las filas de un data.frame basado en una condición lógica. Supongamos que tengo un marco de datos como

expr_value cell_type 1 5.345618 bj fibroblast 2 5.195871 bj fibroblast 3 5.247274 bj fibroblast 4 5.929771 hesc 5 5.873096 hesc 6 5.665857 hesc 7 6.791656 hips 8 7.133673 hips 9 7.574058 hips 10 7.208041 hips 11 7.402100 hips 12 7.167792 hips 13 7.156971 hips 14 7.197543 hips 15 7.035404 hips 16 7.269474 hips 17 6.715059 hips 18 7.434339 hips 19 6.997586 hips 20 7.619770 hips 21 7.490749 hips

Lo que quiero es obtener un nuevo marco de datos que se vea igual pero solo tenga los datos para un tipo_celda. Por ejemplo, subset / select rows que contiene el tipo de celda "hesc":

expr_value cell_type 1 5.929771 hesc 2 5.873096 hesc 3 5.665857 hesc

O bien tipo de célula "bj fibroblast" o "hesc":

expr_value cell_type 1 5.345618 bj fibroblast 2 5.195871 bj fibroblast 3 5.247274 bj fibroblast 4 5.929771 hesc 5 5.873096 hesc 6 5.665857 hesc

¿Hay alguna manera fácil de hacer esto?

He intentado:

expr[expr[2] == ''hesc''] # [1] "5.929771" "5.873096" "5.665857" "hesc" "hesc" "hesc"

si el marco de datos original se llama "expr", pero da los resultados en formato incorrecto como puede ver.


A veces, la columna que desea filtrar puede aparecer en una posición diferente a la columna índice 2 o tener un nombre de variable.

En este caso, puede simplemente referir el nombre de la columna que desea filtrar como:

columnNameToFilter = "cell_type" expr[expr[[columnNameToFilter]] == "hesc", ]


El motivo expr[expr[2] == ''hesc''] no funciona es que para un marco de datos, x[y] selecciona columnas, no filas. Si desea seleccionar filas, cambie a la sintaxis x[y,] lugar:

> expr[expr[2] == ''hesc'',] expr_value cell_type 4 5.929771 hesc 5 5.873096 hesc 6 5.665857 hesc


Puede usar el paquete dplyr :

library(dplyr) filter(expr, cell_type == "hesc") filter(expr, cell_type == "hesc" | cell_type == "bj fibroblast")


Usar subset (para uso interactivo)

subset(expr, cell_type == "hesc") subset(expr, cell_type %in% c("bj fibroblast", "hesc"))

o mejor dplyr::filter()

filter(expr, cell_type %in% c("bj fibroblast", "hesc"))


expr[expr$cell_type == "hesc", ] expr[expr$cell_type %in% c("hesc", "bj fibroblast"), ]