根据字符串中的条件和位置删除字符 - R

Remove character based on condition and position in string - R

我正在用这样的字符变量清理数据集:

df <- c("2015  000808", "2013  000041", "2015  000005", "2015  301585", "2015  311585", "2014  380096", "2013  100041")

所以我可以实现这个结果,其中第二个数字前面的 000 被删除,每个数字都粘贴在一起:

"2015808"
"201341"
"20155"
"2015301585"
"2015311585"
"2014380096"
"2013100041"

我一直在尝试找到删除字符串第二部分中数字之前出现的 0 的最佳方法。我看过 gsubsubstring 但我有点困惑如何根据它们的位置和条件删除零模式?类似于“仅当它们位于数字 1-9 和位置 7-11 时才删除一个或多个零”。

我们可以使用 read.table 来读取两列(使用默认的 space 分隔符会自动读取为 numeric 列,而数字 class 不允许0 前缀,因此去除 0s),然后使用 do.call

按行 paste data.frame 列
do.call(paste0, read.table(text = df, header = FALSE))
[1] "2015808"    "201341"     "20155"      "2015301585" "2015311585" "2014380096" "2013100041"

或与sub - 匹配一个或多个spaces (\s+) 后跟零个或多个(*) 0,并替换为空白("")

sub("\s+0*", "", df)
[1] "2015808"    "201341"     "20155"      "2015301585" "2015311585" "2014380096" "2013100041"

虽然 akrun 的方法是应该使用的方法。这是 stringr 组成:

  1. word(df, 1)我们取字符串的左边部分
  2. word(df, -1)我们取右边的部分(这里我们用 2a. str_remove_all 使用正则表达式 ^0+ 删除前导零。
  3. 最后我们用str_c把两部分结合起来:
library(stringr)
str_c(word(df,1), str_remove_all(word(df, -1), '^0+'))
[1] "2015808"    "201341"     "20155"      "2015301585" "2015311585" "2014380096" "2013100041"