データのサブセット化に問題があります。最初の3文字がG45で始まる列xでサブセット化されたデータが必要です。
私のデータフレーム:
x <- c("G448", "G459", "G479", "G406")
y <- c(1:4)
My.Data <- data.frame (x,y)
私が試してみました:
subset (My.Data, x=="G45*")
しかし、ワイルドカードの使用方法がわかりません。インデックスを見つけるためにgrep()も試しました。
grep ("G45*", My.Data$x)
しかし、G45で始まる行だけでなく、4行すべてを返します。おそらく、ワイルドカードの使用方法がわからないためです。
_[
_を使用して抽出するのは非常に簡単です:
grep
は、検索パターンに一致した位置を提供します(_value = TRUE
_を使用しない限り)。
_grep("^G45", My.Data$x)
# [1] 2
_
単一の列の値内で検索しているため、実際には行インデックスに対応します。そのため、_[
_(_My.Data[rows, cols]
_を使用して特定の行と列を取得する場所)で使用します。
_My.Data[grep("^G45", My.Data$x), ]
# x y
# 2 G459 2
_
subset
のヘルプページでは、_[
_よりもこの関数を使用する場合、grep
およびgrepl
をsubset
とともに使用する方法を示しています。以下に例を示します。
_subset(My.Data, grepl("^G45", My.Data$x))
# x y
# 2 G459 2
_
R 3.3では、startsWith
関数も使用できるようになりました。この関数は、subset
(または上記の他のアプローチ)で再び使用できます。関数のヘルプページによると、substring
またはgrepl
を使用するよりもかなり高速です。
_subset(My.Data, startsWith(as.character(x), "G45"))
# x y
# 2 G459 2
_
stringr
パッケージを使用することもできます
library(dplyr)
library(stringr)
My.Data %>% filter(str_detect(x, '^G45'))
この場合、'^'
(で始まる)を使用して、必要な結果を取得することはできません