variabili - trasposta in r




Filtra le righe data.frame in base a una condizione logica (4)

Voglio filtrare le righe da un data.frame base a una condizione logica. Supponiamo di avere una cornice dati simile

   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

Quello che voglio è ottenere un nuovo frame di dati che abbia lo stesso aspetto ma che abbia solo i dati per un tipo di cella. Per esempio sottoinsieme / seleziona le righe che contengono il tipo di cella "hesc":

   expr_value     cell_type
1    5.929771          hesc
2    5.873096          hesc
3    5.665857          hesc

O entrambi i tipi di cella "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

C'è un modo semplice per farlo?

Ho provato:

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

se il frame di dati originale è chiamato "expr", ma dà i risultati nel formato sbagliato come puoi vedere.


A volte la colonna che si desidera filtrare può apparire in una posizione diversa rispetto all'indice della colonna 2 o avere un nome di variabile.

In questo caso, puoi semplicemente riferire il nome della colonna che vuoi filtrare come:

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

La ragione expr[expr[2] == 'hesc'] non funziona è che per un frame di dati, x[y] seleziona colonne, non righe. Se vuoi selezionare le righe, modifica invece la sintassi x[y,] :

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

Usa subset (per uso interattivo)

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

o meglio 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"), ]






dataframe