>我确实有一个这样的数据帧
columna <- c(1,2,3)
columnb <- c("a b e", "c d", "a c d")
columnc <- as.Date(c('2010-11-1','2008-3-25','2007-3-14'))
alldata <- data.frame(columna,columnb,columnc)
tokeep <- c("c", "e")
我想得到相同的alldata
,修改columnb
只保留columnb
tokeep
中找到的字符串。
理想情况下,我希望有alldata$columnb
[ "e", "c", "c" ]
我最初以为我可以使用类似的东西
filter(alldata, alldata$columnb %in% tokeep)
alldata[which(alldata$b %in% tokeep), ]
但我无法找到解决方案。
有人可以指导我吗?
我们可以尝试使用gsub
用空字符串替换我们不想要的字符
alldata$columnb<- gsub(paste0("[^",paste0(tokeep,collapse = "|"),"]"),"", alldata$columnb)
alldata
# columna columnb columnc
#1 1 e 2010-11-01
#2 2 c 2008-03-25
#3 3 c 2007-03-14
我们正在创建的正则表达式是
paste0("[^",paste0(tokeep, collapse = "|"), "]")
#[1] "[^c|e]"
这意味着除c
或e
之外的任何内容。
编辑
根据Wiktor的评论,我们可能需要正则表达式作为
paste0("[^",paste0(tokeep,collapse = ""),"]")
#[1] "[^ce]"
另一种选择是str_extract
library(stringr)
alldata$columnb <- str_extract(alldata$columnb, paste(tokeep, collapse="|"))
alldata$columnb
[#1] "e" "c" "c"