2017-07-14 7 views
0

フィーチャが正規表現にマッチするかどうかを調べるために、マッチの値を使用して新しいフィーチャを作成します。正規表現と正規表現の値に基づいてデータフレームを変更します

私はthisポストを見つけ、私の問題の答えを使用しようとしました。他のCAD NAの値を作成し、新しい列CADでその値を使用text_field内の正規表現\\[[^]]*\\]の一致があるかどう

library(dplyr) 
library(stringr) 

dat.p <- dat.p %>% 
    mutate(
    cad = ifelse(str_locate(text_field, "\\[[^]]*\\]"), 
       str_extract(text_field, "\\[[^]]*\\]"), 
       NA) 
    ) 

。私はそれを実行すると

私はエラーを取得する:

Error: wrong result size (1000000), expected 500000 or 1 

は、私はこれをどのように行うのですか?

いくつかのサンプルデータ:あなたが変異しifelseになぜわざわざ

df <- data.frame(
    id = 1:2, 
    sometext = c("[cad] apples", "bannanas") 
) 

df.desired <- data.frame(
    id = 1:2, 
    sometext = c("[cad] apples", "bannanas"), 
    cad = c("[cad]", NA) 
) 

答えて

3

は、私は知らないとき、それは何も抽出していない場合str_extractはあなたにNAを与えるという事実を使用して、その1つのライナー:

> df$cad = str_extract(df$sometext,"\\[[^]]*\\]") 
> df 
    id  sometext cad 
1 1 [cad] apples [cad] 
2 2  bannanas <NA> 

Rをデバッグするには、式を個別に試して、何が起こっているのかを見てください。

明確 ifelseの最初の引数として仕事に行くのではありません
> str_locate(df$sometext,"\\[[^]]*\\]") 
    start end 
[1,]  1 5 
[2,] NA NA 

:たとえば、あなたのifelseへの最初の要素は、このです。それでなぜあなたはそれをしたと思いましたか?

2
> df$cad <- regmatches(df$sometext, gregexpr("\\[[^]]*\\]", df$sometext)) 
> df 
    id  sometext cad 
1 1 [cad] apples [cad] 
2 2  bannanas 
+0

あなたはベースを使用するために+1を与えましたが、あなたはNAに不足しているマッチを設定していないことを認識しました... – Spacedman