マイクロRNAデータを含む371MBのテキストファイルがあります。基本的に、ヒトmicroRNAに関する情報を含む行のみを選択したいと思います。
Read.tableを使用してファイルを読み込みました。通常、私はsqldfで望んでいたことを達成します-「like」構文があれば(miRNAが「hsa」のように*から<>を選択します)。残念ながら、sqldfはその構文をサポートしていません。
Rでこれを行うにはどうすればよいですか?私はstackoverflowを見回しましたが、部分的な文字列の一致を行う方法の例は見ていません。ストリンガーパッケージもインストールしましたが、必要なものがまったくありません。
私がやりたいのは、このようなものです-hsa-*が選択されているすべての行です。
selectedRows <- conservedData[, conservedData$miRNA %like% "hsa-"]
もちろん、これは正しい構文ではありません。
誰かがこれを手伝ってくれますか?読んでくれてありがとう。
アスダ
現在のアプローチで関数%like%
に言及していることに気付きました。それが「data.table」からの%like%
への参照であるかどうかはわかりませんが、もしそうであれば、間違いなく次のように使用できます。
オブジェクトはdata.table
である必要はありません(ただし、data.frame
sとdata.table
sのサブセット化アプローチは同一ではないことに注意してください)。
library(data.table)
mtcars[rownames(mtcars) %like% "Merc", ]
iris[iris$Species %like% "osa", ]
それがあなたが持っていたものであるなら、おそらくあなたはサブセットデータの行と列の位置をちょうど混ぜていたでしょう。
パッケージをロードしたくない場合は、grep()
を使用して、一致する文字列を検索してみてください。以下に、mtcars
データセットの例を示します。ここでは、行名に「Merc」が含まれるすべての行を照合しています。
mtcars[grep("Merc", rownames(mtcars)), ]
mpg cyl disp hp drat wt qsec vs am gear carb
# Merc 240D 24.4 4 146.7 62 3.69 3.19 20.0 1 0 4 2
# Merc 230 22.8 4 140.8 95 3.92 3.15 22.9 1 0 4 2
# Merc 280 19.2 6 167.6 123 3.92 3.44 18.3 1 0 4 4
# Merc 280C 17.8 6 167.6 123 3.92 3.44 18.9 1 0 4 4
# Merc 450SE 16.4 8 275.8 180 3.07 4.07 17.4 0 0 3 3
# Merc 450SL 17.3 8 275.8 180 3.07 3.73 17.6 0 0 3 3
# Merc 450SLC 15.2 8 275.8 180 3.07 3.78 18.0 0 0 3 3
また、別の例では、文字列iris
を検索するosa
データセットを使用しています。
irisSubset <- iris[grep("osa", iris$Species), ]
head(irisSubset)
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1 5.1 3.5 1.4 0.2 setosa
# 2 4.9 3.0 1.4 0.2 setosa
# 3 4.7 3.2 1.3 0.2 setosa
# 4 4.6 3.1 1.5 0.2 setosa
# 5 5.0 3.6 1.4 0.2 setosa
# 6 5.4 3.9 1.7 0.4 setosa
あなたの問題のために試してみてください:
selectedRows <- conservedData[grep("hsa-", conservedData$miRNA), ]
stringr パッケージのstr_detect()
を試してください。これは、文字列内のパターンの有無を検出します。
dplyr パッケージの%>%
パイプとfilter()
も組み込む方法は次のとおりです。
library(stringr)
library(dplyr)
CO2 %>%
filter(str_detect(Treatment, "non"))
Plant Type Treatment conc uptake
1 Qn1 Quebec nonchilled 95 16.0
2 Qn1 Quebec nonchilled 175 30.4
3 Qn1 Quebec nonchilled 250 34.8
4 Qn1 Quebec nonchilled 350 37.2
5 Qn1 Quebec nonchilled 500 35.3
...
これにより、Treatment変数にサブストリング「non」が含まれる行のサンプルCO2データセット(Rに付属)がフィルターされます。 str_detect
が固定一致を見つけるか、正規表現を使用するかを調整できます-ストリンガーパッケージのドキュメントを参照してください。
LIKE
はsqliteで動作するはずです:
require(sqldf)
df <- data.frame(name = c('bob','robert','peter'),id=c(1,2,3))
sqldf("select * from df where name LIKE '%er%'")
name id
1 robert 2
2 peter 3