首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据字符串-R中的条件和位置删除字符

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

Stack Overflow用户
提问于 2022-01-30 17:48:06
回答 2查看 575关注 0票数 2

我正在清理一个具有以下字符变量的数据集:

代码语言:javascript
运行
复制
df <- c("2015  000808", "2013  000041", "2015  000005", "2015  301585", "2015  311585", "2014  380096", "2013  100041")

因此,我可以实现这样的结果:删除第二个数字前面的000,并将每个数字粘贴在一起:

代码语言:javascript
运行
复制
"2015808"
"201341"
"20155"
"2015301585"
"2015311585"
"2014380096"
"2013100041"

我被困在试图找到最好的方式,以删除0之前发生的数字在第二部分的字符串。我看过gsubsubstring,但我有点困惑,如何根据它们的位置和条件删除零模式?类似于“移除一个或多个零”的东西,只有当它们在数字1-9之前并位于7-11位置时才能移除。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-30 19:04:15

而akrun的方法是应该使用的方法。以下是stringr组合:

  1. ,和word(df, 1),我们取字符串的左边,

  1. word(df, -1),右边(这里我们使用2a。使用regex zeros.
  2. Finally删除前导str_remove_all我们使用str_c组合了两个部分:

代码语言:javascript
运行
复制
library(stringr)
str_c(word(df,1), str_remove_all(word(df, -1), '^0+'))
代码语言:javascript
运行
复制
[1] "2015808"    "201341"     "20155"      "2015301585" "2015311585" "2014380096" "2013100041"
票数 3
EN

Stack Overflow用户

发布于 2022-01-30 17:49:25

我们可以使用read.table作为两列进行读取(通过使用默认的空格分隔符和数值类不允许0前缀,从而去掉0)自动读取为numeric列,然后使用do.call逐行读取data.frame列。

代码语言:javascript
运行
复制
do.call(paste0, read.table(text = df, header = FALSE))
[1] "2015808"    "201341"     "20155"      "2015301585" "2015311585" "2014380096" "2013100041"

或使用sub -匹配一个或多个空格(\\s+),后面为零或多个(*) 0,并替换为空白("")

代码语言:javascript
运行
复制
sub("\\s+0*", "", df)
[1] "2015808"    "201341"     "20155"      "2015301585" "2015311585" "2014380096" "2013100041"
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70917283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档