Я хочу отфильтровать строки на 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" или "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», но он дает результаты в неправильном формате, как вы можете видеть.
==
функция будет собирать любые записи NA, а также "hesc", тогда как%in%
не будет.Использовать
subset
(для интерактивного использования)или лучше
dplyr::filter()
источник
subset
есть большое ПРЕДУПРЕЖДЕНИЕ: «Это удобная функция, предназначенная для интерактивного использования. Для программирования лучше использовать стандартные функции поднабора, такие как [, и, в частности, нестандартная оценка подмножества аргументов может иметь непредвиденные последствия». «.Причина
expr[expr[2] == 'hesc']
не работает в том, что для фрейма данныхx[y]
выбираются столбцы, а не строки. Если вы хотите выбрать строки, измените их на синтаксисx[y,]
:источник
NA
записи! Следовательно, не применимо. Причина, по которой это казалось правдой, объясняется тем, чтоNA
в фильтрованном столбце нет данных exprrame. Если естьNA
, ваш путь не применим, как я уже говорил.Вы можете использовать
dplyr
пакет:источник
Кажется, никто не включил функцию which. Это также может оказаться полезным для фильтрации.
Это также обработает NA и удалит их из результирующего кадра данных.
При выполнении этого на 9840 на 24 фрейме данных 50000 раз кажется, что метод с тем же временем выполнения работает на 60% быстрее, чем метод% in%.
источник
Я работал над фреймом данных и без удачи с предоставленными ответами, он всегда возвращал 0 строк, поэтому я нашел и использовал grepl:
Который в основном урезал мой фрейм данных только до тех строк, которые содержали нисходящую линию в столбце направления передачи. PS Если кто-то может догадаться, почему я не вижу ожидаемого поведения, пожалуйста, оставьте комментарий.
Конкретно на оригинальный вопрос:
источник
Иногда столбец, который вы хотите отфильтровать, может оказаться в другом положении, чем столбец с индексом 2, или иметь имя переменной.
В этом случае вы можете просто ссылаться на имя столбца, который вы хотите отфильтровать:
источник
NA
записи! Следовательно, не применимо.мы можем использовать библиотеку data.table
или фильтр с использованием
%like%
оператора для сопоставления с образцомисточник
Это сработало как волшебство для меня.
celltype_hesc_bool = expr['cell_type'] == 'hesc'
expr_celltype_hesc = expr[celltype_hesc]
Проверьте это сообщение в блоге
источник