我正在尝试编写一个函数,该函数对包含某个字符串的数据集进行子集化。
模拟数据:
library(stringr)
set.seed(1)
codedata <- data.frame(
Key = sample(1:10),
ReadCodePreferredTerm = sample(c("yes", "prefer", "Had refer"), 20, replace=TRUE)
)
用户定义的功能:
findterms <- function(inputdata, variable, searchterm) {
outputdata <- inputdata[str_which(inputdata$variable, regex(searchterm, ignore_case=TRUE)), ]
return(outputdata)
}
我期望至少返回几行,但是运行以下代码时我得到0:
findterms(codedata, ReadCodePreferredTerm, " refer") #the space in front of this word is deliberate
我意识到我正在尝试做一些非常简单的事情...但是无法找出为什么它不起作用。
注意,当未定义为函数时,代码可以正常工作
referterms <- codedata[str_which(codedata$ReadCodePreferredTerm, regex(" refer", ignore_case=TRUE)), ]
答案 0 :(得分:0)
您可以使用dplyr和stringr轻松完成此操作
library(magrittr) # For the pipe (%>%)
library(dplyr)
library(stringr)
codedata %>%
dplyr::filter(str_detect(ReadCodePreferredTerm, '\\brefer\\b'))
如果愿意,还可以编写自己的函数,如果不想为变量名传递字符串,则也需要rlang。像这样的作品
library(rlang)
findterms <- function(df, variable, searchterm) {
variable <- enquo(variable)
return(
df %>%
dplyr::filter(str_detect(!!variable, str_interp('\\b${ searchterm }\\b')))
)
}
findterms(codedata, ReadCodePreferredTerm, 'refer')