所以我想要这个数据框/字符串/向量
x<-c("WB (16)","CT (14)WB (15)","NBIO (15)","CT (12)CITG-TP (17)","BK (11)PS (15)BK-AR (15)")
看起来像这样
x<-
WB
WB
NBIO
CITG-TP
BK-AR
因此,我想提取最后一个或唯一的值(这是一个单词及其年份,所以例如WB(15)是一个值),然后用括号将年份删除。我尝试使用sub(".*?)", "", x)
进行此操作,但是当只有一个条目时,它也会清除此错误,如下所示:
c( "", "WB (15)" , "" , "CITG-TP (17)","PS (15)BK-AR (15)")
我该怎么做?
答案 0 :(得分:2)
这将删除引号之间的数字,并且它们选择每个字符串中的最后一个代码。我正在使用管道(%>%
)来使代码更干净。
library(magrittr) # pipe operators
newx <-
x %>%
gsub('[[:blank:]]\\([[:digit:]]*\\)', ';', .) %>% # change all " (NN)" to ";"
strsplit(split = ';') %>% # split the strings into a list
lapply(rev) %>% # revert the order
lapply('[[', 1) %>% # select first element
unlist() # change back to vector
> newx
[1] "WB" "WB" "NBIO" "CITG-TP" "BK-AR"
答案 1 :(得分:1)
我强烈怀疑这是最有效的正则表达式,但这可以为您提供所需的确切输出:
null
我玩过的游戏更多,而且看起来也可以。
None
这是一种更通用的方法
library(stringr)
str_replace_all(x, "CT\\s\\(\\d+\\)|BK\\s\\(\\d+\\)|PS\\s\\(\\d+\\)|\\s\\(\\d+\\)","")
[1] "WB" "WB" "NBIO" "CITG-TP" "BK-AR"
我可能有某种方法可以选择模式的最后一次出现,但是我遇到了麻烦,所以我定义了一个函数来反转字符串并采用模式的第一次出现,然后我们将字符串以正确的顺序返回。
答案 2 :(得分:1)
TextIOWrapper