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

Quiero filtrar filas de undata.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 que solo tenga los datos para un tipo de celda. P.ej. subgrupo / filas de selección 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 el tipo de célula "bj fibroblasto" 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 un formato incorrecto, como puede ver.

Respuestas a la pregunta(8)

Su respuesta a la pregunta