まったく個人的なメモ
アンケート集計ファイルの「自由記述」テキスト列に、特定のキーワードを含むレコードだけ抽出するという単純な作業。
dplyr と strintr を使って何気に操作したら想定外の結果がかえってきて、しばらくして自分の勘違いに気が付いた。
> # 単純な文字列ベクトルを要素とするデータフレーム
> x <- c("ABC","CDE","EFG")
> xx <- data.frame(X = x, stringsAsFactors = FALSE)
> # X列の文字列にCを含むレコードだけみたい
> xx %>% select (X) %>% str_subset("C")
[1] "c(\"ABC\", \"CDE\", \"EFG\")"
> # あれ?
> xx %>% select (X) %>% grep(pattern="C", x = ., value = TRUE)
X
"c(\"ABC\", \"CDE\", \"EFG\")"
> # うん?
> xx %>% select (X) %>% nchar
X
22
> # dplyr::selectが問題なの?
> xx $ X %>% str_subset("C")
[1] "ABC" "CDE"
> xx $ X %>% grep(pattern="C", x = ., value = TRUE)
[1] "ABC" "CDE"
> xx $ X %>% nchar
[1] 3 3 3
> # どうなってんの?
> xx %>% select (X) %>% dput
structure(list(X = c("ABC", "CDE", "EFG")), row.names = c(NA,
-3L), class = "data.frame", .Names = "X")
> xx $ X %>% dput
c("ABC", "CDE", "EFG")
> # ああ、そうですか
> ## 結局、こうすれば良いんか
> xx %>% filter (str_detect(X, "C"))
X
1 ABC
2 CDE
> ## 後でdplyrのソース読め、俺
以上、お粗末さまでした。反省します。