删除包含点R的数字

时间:2018-03-29 16:15:36

标签: r

这是我要修改的专栏:

ob3

期望的输出:

"00640+6.2.1.1; 00680+6.2.1.1; 00720+6.2.1.1;"

我的想法是用点替换“+”,然后删除包含点的所有数字,如果它是小数,但除了第一个00640之外它除了其他一切,如何修改它?

00640; 00680; 00720

3 个答案:

答案 0 :(得分:4)

在您的示例数据中,我们可以在加号后删除所有内容。如果是这样的话,

tmp <- gsub("\\+.*", "", tmp)

如果情况并非如此,请提供更多数据,以便我们找到更合适的解决方案。另外,这些是你正在使用的矢量,而不是一个字符串,对吗?这似乎是这种情况,但你的帖子中还不清楚。您应该了解如何提供更完整的reprex

答案 1 :(得分:2)

不需要strsplitsub/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"

解释。

  1. ^:字符串的开头。
  2. ^([[:digit:]]+):字符串开头至少有一个数字,括号上写成一个组,第一个。
  3. .*$:任何字符直到结尾($)。
  4. \\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"

正则表达式解释

  1. ^:字符串的开头
  2. (\\d+):任意数量的连续数字。 ()使其成为第1组
  3. (?=\\+):后跟+
  4. .*:之后的任何事情