首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于载波位置删除多个字符

基于载波位置删除多个字符
EN

Stack Overflow用户
提问于 2021-05-12 17:26:08
回答 3查看 57关注 0票数 1

我有以下列表元素。它包含原始文本,列基于字符长度。第一行总是427个字符宽。其余行宽375个字符。

我需要删除每一行中375个字符宽的最后9个字符。那将是航母位置367到375

代码语言:javascript
复制
df = structure(list(X1 = c("00000104900914254       1BBVA SEGUROS DE VIDA COLOMBIA S.A.                                                                                                                    NI800240882       0ACRA 11 87-51                            001130000000   7777777   LUZ.MARTINEZ@xxxx.COM                                       2021-042021-04-22U                                                  0004900000000213P0000000000022021-04-21", 
"00000012CC1130000000      MORENO              REINA                         DANIELA                                           MORENO              AYALA                         LUIS                ALBERTO                       CC63000000        03N1N68001      300004542630.08000000036400000000000                              000454263                               000908526", 
"00000022CC63000000        MURILLO             ESCALANTE                     KELLY               JOHANA                                                                                                                                              08N1N68001      300009085260.08000000072700000000000                              000908526                               000908526"
)), .Names = "X1", row.names = c(NA, -3L), class = c("tbl_df", 
"tbl", "data.frame"))
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-05-12 17:41:40

你可以使用sub甚至gsub

代码语言:javascript
复制
df$X2 <- sub("^(.{366}).{9}$", "\\1", df$X1, perl = TRUE)
nchar(df$X2)
[1] 427 366 366

使用此代码,第一行保持为427个字符,而其余的则减少到366。

票数 1
EN

Stack Overflow用户

发布于 2021-05-12 17:27:57

我们可以在nchar上使用minsubstr

代码语言:javascript
复制
library(dplyr)
out <-  df %>%
   mutate(X1 = substr(X1, 1, min(nchar(X1))))

如果我们需要更改剩下的行,保持第一行不变

代码语言:javascript
复制
out <- df %>%
        mutate(X1 = replace(X1, -1, substr(X1[-1], 1, 367)))


nchar(out$X1)
#[1] 427 367 367

注意:substr应该是最快的选项

或者使用base R

代码语言:javascript
复制
df$X1 <- substr(df$X1, 1, min(nchar(df$X1)))
票数 2
EN

Stack Overflow用户

发布于 2021-05-12 18:00:26

这也是要添加到已经很棒的解决方案中的另一个解决方案:

代码语言:javascript
复制
library(dplyr)
library(stringr)

DT %>%
  mutate(X1 = ifelse(nchar(X1) != 427, str_sub(X1, 1L, 367L), X1)) %>%
  mutate(nc = nchar(X1)) %>%
  select(nc)

# A tibble: 3 x 1
     nc
  <int>
1   427
2   367
3   367

最后两行代码用于测试,因此可以省略。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67508360

复制
相关文章

相似问题

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