R 根据规则从字符串中提取字符(重复连字符)
我有一个很大的数据框,其中有一个列,看起来像这样:R 根据规则从字符串中提取字符(重复连字符),r,regex,string,substring,extract,R,Regex,String,Substring,Extract,我有一个很大的数据框,其中有一个列,看起来像这样: var <- c("150507-001-0000001", "KMD070515-2-0000001", "15144KMD01AA-0000001", "Z75Z151222-0000001") 所以我知道如果我只想在连字符之前得到数据,我会这样做: > var <- sub("-.*", "", var) > var 150507 KMD070515 15144KMD01AA Z75Z151222 >v
var <- c("150507-001-0000001", "KMD070515-2-0000001",
"15144KMD01AA-0000001", "Z75Z151222-0000001")
所以我知道如果我只想在连字符之前得到数据,我会这样做:
> var <- sub("-.*", "", var)
> var
150507
KMD070515
15144KMD01AA
Z75Z151222
>var
150507
KMD070515
15144KMD01AA
Z75Z151222
我还尝试了一个软件包qdap,它给了我想要的东西:
library("qdap")
var <- beg2char(var, "-", 2)
库(“qdap”)
var我们可以使用sub
来匹配非-
字符的模式,后跟-
和另一组非-
字符,作为一个组捕获((…)
)并替换为捕获组的反向引用(\\1
)
sub("^([^-]+-[^-]+).*", "\\1", var)
#[1] "150507-001" "KMD070515-2"
#[3] "15144KMD01AA-0000001" "Z75Z151222-0000001"
下面是一个非正则表达式解决方案,供可能感兴趣的人使用:
x <- "150507-001-0000001"
paste(strsplit(x, "-")[[1]][1:2], collapse="-")
[1] "150507-001"
顺便说一句,格式化为字符是没有帮助的。谢谢,这很好用!但是我的左连接仍然不起作用,所以我猜问题出在另一个地方。我会检查我的代码。@LouiseSørensen我会检查是否有前导/后置空格。尝试使用trimws
删除这些
x <- "150507-001-0000001"
paste(strsplit(x, "-")[[1]][1:2], collapse="-")
[1] "150507-001"
sapply(var, function(x) paste(strsplit(x, "-")[[1]][1:2], collapse="-"))