0

grep解決できないように見えることについて簡単な質問があります。名前のリストがあるとしましょう: brand<-c(Brand1, Brand2, Brand3, Brand4). これらの名前のいずれかが別の文字列変数 (var1) 内にあるかどうかを識別し、論理変数 (T/F) を作成したいと考えています。

ID        var1                    var_filter
1         Text about Brand 1      TRUE
1         Text                    FALSE
1         Text about Brand 2      TRUE
1         Text about Brand 3      TRUE
1         Text                    FALSE
1         Text about Brand 1      TRUE

どうすればこれを行うことができますか?私の推測では ですがgrep、単一の文字列ではなく、可能な文字列のリスト全体がある場合、どうすればよいかわかりません。

4

3 に答える 3

1
Brand1 <- "Brand 1";  Brand2 <- "Brand 2"; Brand3 <- "Brand 3"; Brand4 <- "Brand 3"
brand <- c(Brand1, Brand2, Brand3, Brand4)

dfrm$var_filter <- grepl( paste(brand, collapse="|"), dfrm$var1)
于 2013-04-02T16:56:19.187 に答える
1

sapplygrepl、およびの組み合わせを使用しanyてタスクを達成します。アイデアは、grepl を使用して、テキスト内のどの要素に特定のブランドが含まれているかを見つけることです。私は sapply を使用して、ブランドごとにこれらを行います。次に with を使用applyanyて、テキスト内のどの値にブランドが含まれているかを識別します。

brands <- c("CatJuice", "robopuppy", "DasonCo")

text <- c("nononono", "That CatJuice is great", "blargcats", "I gave the robopuppy some CatJuice")

id <- sapply(brands, grepl, text, fixed = TRUE)
# if case sensitivity is an issue
#id <- sapply(tolower(brands), grepl, tolower(text), fixed = TRUE)
apply(id, 1, any)

これは大文字と小文字が区別されるため、それが問題である場合は、tolowerすべてを小文字に変換するために簡単に使用できます。

于 2013-04-02T14:06:13.040 に答える
0

パターで使えます|。このような:

dados <- read.table(text='ID var1
1 TextaboutBrand1
1 Text
1 TextaboutBrand2
1 TextaboutBrand3
1 Text
1 TextaboutBrand1', header=TRUE, sep=' ')

grep1 <- function(x, brand) { length(grep(paste0(brand,collapse='|'), x[2])) == 1 }

apply(dados,1,grep1,brand)

または使用mapply()...

于 2013-04-02T14:09:55.393 に答える