【发布时间】:2018-06-08 10:34:50
【问题描述】:
我有一个文本变量,我想创建指示变量来标识文本变量中的模式向量。 应该为每个模式创建一个新的指标变量(最好使用与模式相同的变量名称。
创建示例数据:
#rm(list = ls())
mydata <- read.table(
header = T, con <- textConnection
('
ID text
6 "aaa"
7 "bbb"
10 "ccc"
11 "a bbb"
29 "a bbb"
30 "bbb"
31 "ddd"
'), stringsAsFactors = FALSE, fill = TRUE, strip.white = TRUE)
close(con)
单一模式匹配
# a single pattern
mydata$a <- as.integer(grepl(pattern = "aaa", x = mydata$text))
mydata$a
然后创建一个模式向量:
# multiple patterns stored in a vector
vecpat <- c("aaa", "bbb", "ccc", "ddd", "eee")
现在我的问题是如何调整上面的代码来为多个模式进行模式匹配和变量创建。 新变量显示添加到数据框中,标签为“aaa”、“bbb”、“ccc”、“ddd”、“eee”,值范围为 0 到 1。
我尝试使用 stringr 包中的 str_match_all 来执行此操作。但我不确定如何处理生成的对象。 以下链接 (https://rpubs.com/iPhuoc/stringr_manipulation) 对此进行了调查,但未提供比以下引用更多的信息: “如果你想提取第一个电话号码之外的内容,例如最后一个字符串中的第二个电话号码,你可以使用 str_match_all()。但是,就像 str_split() 它会为每个输入字符串返回一个包含一个组件的列表,并且你'将需要使用 lapply() 来处理结果。"
【问题讨论】:
-
这是你需要的:
sapply(vecpat, grepl, x=mydata$text)+0L
标签: r pattern-matching stringr