views:

306

answers:

3

Hi,

let's suppose that I have data frame like

   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

What I want to is to get a new data frame which looks the same but only has the data for one cell_type. E.g.

   expr_value     cell_type
1    5.929771          hesc
2    5.873096          hesc
3    5.665857          hesc

or for two classes like

   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

Is there any easy way to do this?

What I've tried already is something like

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

if the original data frame is called expr but it gives the results in wrong format as you can see.

+4  A: 
expr[expr$cell_type == "hesc", ]

expr[expr$cell_type %in% c("hesc", "bj fibroblast"), ]
learnr
Be aware that the `==` function will pick up any NA records as well as "hesc", whereas `%in%` won't.
Matt Parker
@Matt when using `subset` this works as expected.
Eduardo Leoni
+13  A: 

Use subset

subset(expr, cell_type == "hesc")
subset(expr, cell_type %in% c("bj fibroblast", "hesc"))
rcs
+2  A: 

The reason expr[expr[2] == 'hesc'] doesn't work is that for a data frame, x[y] selects columns, not rows. If you want to select rows, change to the syntax x[y,] instead:

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