Ответ 1
expr[expr$cell_type == "hesc", ]
expr[expr$cell_type %in% c("hesc", "bj fibroblast"), ]
Я хочу фильтровать строки из 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. Например. подмножество/выбор строк, которые содержат тип ячейки "hesc":
expr_value cell_type
1 5.929771 hesc
2 5.873096 hesc
3 5.665857 hesc
Или любой тип ячейки "bj fibroblast" или "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"
если исходный фрейм данных называется "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']
не работает, так как для фрейма данных x[y]
выбирает столбцы, а не строки. Если вы хотите выбрать строки, измените вместо этого синтаксис 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, или иметь имя переменной.
В этом случае вы можете просто ссылаться на имя столбца, которое хотите отфильтровать, как:
columnNameToFilter = "cell_type"
expr[expr[[columnNameToFilter]] == "hesc", ]