Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 根据规则从字符串中提取字符(重复连字符)_R_Regex_String_Substring_Extract - Fatal编程技术网

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="-"))