تصفية data.frame الصفوف حسب الشرط المنطقي




subset dataframe (4)

استخدام 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"))

أريد تصفية الصفوف من 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

ما أريده هو الحصول على إطار بيانات جديد يبدو بنفس الشكل ولكن يحتوي فقط على بيانات لخلية واحدة. على سبيل المثال ، المجموعة الفرعية / تحديد الصفوف التي تحتوي على نوع الخلية "hesc":

   expr_value     cell_type
1    5.929771          hesc
2    5.873096          hesc
3    5.665857          hesc

أو إما نوع الخلية "bj fibrroblast" أو "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[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")

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

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




dataframe