这是我要修改的专栏:
ob3
期望的输出:
"00640+6.2.1.1; 00680+6.2.1.1; 00720+6.2.1.1;"
我的想法是用点替换“+”,然后删除包含点的所有数字,如果它是小数,但除了第一个00640之外它除了其他一切,如何修改它?
00640; 00680; 00720
答案 0 :(得分:4)
在您的示例数据中,我们可以在加号后删除所有内容。如果是这样的话,
tmp <- gsub("\\+.*", "", tmp)
如果情况并非如此,请提供更多数据,以便我们找到更合适的解决方案。另外,这些是你正在使用的矢量,而不是一个字符串,对吗?这似乎是这种情况,但你的帖子中还不清楚。您应该了解如何提供更完整的reprex。
答案 1 :(得分:2)
不需要strsplit
,sub/paste
就可以完成这项工作。
x <- scan(what = character(),
text = "00640+6.2.1.1; 00680+6.2.1.1; 00720+6.2.1.1",
sep = ";")
x <- trimws(x)
y <- sub("^([[:digit:]]+).*$", "\\1", x)
y
#[1] "00640" "00680" "00720"
paste(y, collapse = "; ")
#[1] "00640; 00680; 00720"
解释。
^
:字符串的开头。^([[:digit:]]+)
:字符串开头至少有一个数字,括号上写成一个组,第一个。.*$
:任何字符直到结尾($
)。\\1
:在替换中,匹配上述组。答案 2 :(得分:2)
另一个选项可能是使用look-forward
运算符:
v <- c("00640+6.2.1.1", "00680+6.2.1.1", "00720+6.2.1.1")
gsub("^(\\d+)(?=\\+).*","\\1", v, perl = TRUE)
#[1] "00640" "00680" "00720"
正则表达式解释
^
:字符串的开头(\\d+)
:任意数量的连续数字。 ()
使其成为第1组(?=\\+)
:后跟+
.*
:之后的任何事情