質問

行をフィルタリングしたい 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

私がしたいのは、見た目は同じですが、1 つの 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" の場合、ご覧のとおり、結果が間違った形式で返されます。

役に立ちましたか?

解決

1 の 'cell_type'(例えば 'のhESC')に従って行を選択する==を使用します。

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

、二つ以上の異なる 'cell_type' に従って行を選択する(例えばいずれかの 'のhESC' または 'BJ線維芽')、使用%in%

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", ]

私はデータフレームに取り組んで提供さ答えと運を持っなかった、それは常に0行を返したので、私は発見し、greplを使用します:

df = df[grepl("downlink",df$Transmit.direction),]

どの基本的に送信方向の欄に「ダウンリンク」を含ん行のみに自分のデータフレームをトリミング。後記誰もが私が期待される動作を見ていないよ理由として推測できる場合は、コメントを残してくださいます。

具体的に元の質問に:

expr[grepl("hesc",expr$cell_type),]

expr[grepl("bj fibroblast|hesc",expr$cell_type),]

誰がどの機能が含まれているように思いません。また、フィルタリングのために有用であることが分かることができます。

expr[which(expr$cell == 'hesc'),]

このものNAを処理し、結果としてデータフレームからそれらをドロップします。

9840 50000データフレーム24によって回でこれを実行すると、それがどの方法が%メソッドで%よりも60%高速に実行時間を持っているように思えます。

私たちはdata.tableライブラリを使用することができます。

  library(data.table)
  expr <- data.table(expr)
  expr[cell_type == "hesc"]
  expr[cell_type %in% c("hesc","fibroblast")]

またはフィルタパターンマッチングのため%like%演算子を使用して

 expr[cell_type %like% "hesc"|cell_type %like% "fibroblast"]
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top