过滤一个data.frame

让我们假设我有像数据框

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 

我想要得到一个新的数据框,看起来相同,但只有一个cell_type的数据。 例如

  expr_value cell_type 1 5.929771 hesc 2 5.873096 hesc 3 5.665857 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 

有没有简单的方法来做到这一点?

我已经尝试过的是类似的东西

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

如果原始dataframe被称为expr,但它会给出错误格式的结果,如您所见。

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

使用subset (用于交互式使用)

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

或更好的dplyr::filter()

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

expr[expr[2] == 'hesc']不起作用的原因是对于dataframe, x[y]select列而不是行。 如果要select行,请改为使用语法x[y,]

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

你可以使用dplyr包:

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

有时您想要过滤的列可能会出现在与列索引2不同的位置,或者有一个variables名称。

在这种情况下,您可以简单地引用要过滤的列名称

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