删除字符串末尾的下划线和数字

2023-12-19

我正在使用一个包含带有一些下划线的列的数据集。有一个图案,但它们是不同的图案,如下所示

  ID     Col1
  1029   ap_analog
  2334   critical_1_mm_1
  2334   transpose_2_mm_2
  9877   public_1_yes_0_no_1
  9877   public_1_yes_0_no_2
  1333   Lateral_mm
  1333   Lateral_mm_1
  1333   Lateral_mm_2
  1333   Lateral_mm_3
  1333   ap_mm_axial
  1333   ap_mm_axial_1
  1333   ap_mm_axial_2
  1333   ap_mm_axial_3
  9876   central_star_six_mm
  9876   central_star_six_mm_1
  9876   central_star_six_mm_2
  9876   central_star_six_mm_3

我只是想用这样的最终数据集将数字与字符串分开

  ID     Col1                     Index
  1029   ap_analog                0
  2334   critical_1_mm            1
  2334   transpose_2_mm           2
  9877   public_1_yes_0_no        1
  9877   public_1_yes_0_no        2
  1333   Lateral_mm               0
  1333   Lateral_mm               1
  1333   Lateral_mm               2  
  1333   Lateral_mm               3
  1333   ap_mm_axial              0
  1333   ap_mm_axial              1
  1333   ap_mm_axial              2
  1333   ap_mm_axial              3
  9876   central_star_six_mm      0
  9876   central_star_six_mm      1
  9876   central_star_six_mm      2
  9876   central_star_six_mm      3

现在我做这件事效率很低。像这样的东西

df1$index <- df1$Col1

for(i in 1:3) {
  df1$index <-  regmatches(df1$index,gregexpr("(?<=_).*",df1$index,perl=TRUE))
}

df1$index[ which(df1$index == "character(0)")] <- 0

如果有任何改进的建议,我将不胜感激。


一种方式使用dplyr and stringr :

我们可以提取Indexvalue 是末尾的数字Col1, 更换NA值为 0。我们可以删除最后一位数字Col1.

library(dplyr)
library(stringr)

library(dplyr)
df %>%
  mutate(Index = str_extract(Col1, '\\d+$'), 
         Index = replace(Index, is.na(Index), 0), 
         Col1 = sub('_\\d+$', '', Col1))

#    ID                Col1 Index
#1  1029           ap_analog     0
#2  2334       critical_1_mm     1
#3  2334      transpose_2_mm     2
#4  9877   public_1_yes_0_no     1
#5  9877   public_1_yes_0_no     2
#6  1333          Lateral_mm     0
#7  1333          Lateral_mm     1
#8  1333          Lateral_mm     2
#9  1333          Lateral_mm     3
#10 1333         ap_mm_axial     0
#11 1333         ap_mm_axial     1
#12 1333         ap_mm_axial     2
#13 1333         ap_mm_axial     3
#14 9876 central_star_six_mm     0
#15 9876 central_star_six_mm     1
#16 9876 central_star_six_mm     2
#17 9876 central_star_six_mm     3
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

删除字符串末尾的下划线和数字 的相关文章

  • 用表达式分割轴标签

    我有一个带有包含表达式的长标签的图 我想将其分成两行 在表达式中添加 n 结果不符合预期 ylabel lt expression A very long label with text and n expression alpha bet
  • 使用大矩阵操作

    我必须使用 big matrix 对象 并且无法计算某些函数 让我们考虑以下大矩阵 create big matrix object x lt as big matrix matrix sample 1 10 20 replace TRUE
  • 融化R中的下半矩阵

    如何融化下半三角形加对角矩阵 11 NA NA NA NA 12 22 NA NA NA 13 23 33 NA NA 14 24 34 44 NA 15 25 35 45 55 A lt t matrix c 11 NA NA NA NA
  • 用于字数计算的 Swift String 中的字数

    我想做一个程序来找出字符串中有多少个单词 用空格 逗号或其他字符分隔 然后把总数加起来 我正在制作一个平均计算器 所以我想要数据总数 然后将所有单词相加 update Xcode 10 2 x Swift 5 或更高版本 使用基础方法enu
  • R 将多个值与向量进行比较并返回向量[重复]

    这个问题在这里已经有答案了 我有一个向量 A 对于 A 的每个元素 我想检查它是否等于第二个向量 Targets 中的任何元素 我想要一个逻辑值向量 其长度为 A 作为返回 也提到了同样的问题here http r 789695 n4 na
  • 将第 N 行上的 NA 行插入 data.frames 列表,其中 N 来自列表

    经过几个小时后 我发现自己无法解决以下问题 我有一个数据框列表 我想分别向每个 DF 插入 而不是替换 一行或多行 NA 始终至少一行 要插入的 NA 数量存储在单独的列表中 为了说明这一点 我有以下两个列表 list of datafra
  • 跟踪循环迭代

    抛硬币 成功 你赢100 否则你输50 你会一直玩 直到你口袋里有钱a 的价值如何a在任何迭代中都被存储 a lt 100 while a gt 0 if rbinom 1 1 0 5 1 a lt a 100 else a lt a 50
  • 如何添加链接以从我的 R闪亮应用程序在新窗口中打开 pdf 文件?

    我可以使用 a 从我的 Shiny 应用程序添加到外部站点的超链接 a google href http www google com 但如何创建一个链接来打开 pdf 或类似 文件 看起来应该很简单 但我找不到任何例子 我的问题与此类似
  • 正则表达式最多匹配五个单词

    我有一个正则表达式 a zA Z 0 9 1 5 它验证该单词包含字母数字字符和少数特殊字符 并且长度不应超过5人物 如何使此正则表达式接受最多五个与上述正则表达式匹配的单词 a zA Z 0 9 1 5 s a zA Z 0 9 1 5
  • Word通配符搜索的正则表达式查找包含至少3个连续数字的括号

    在以下示例中 airspeed AS user 104A 104B device 101 vehicles 105A C 搜索应该找到 104A 104B 101 and 105A C 但不是 AS 我尝试使用 0 9 0 9 0 9 但这
  • Rust 编程竞赛中最快的惯用 I/O 例程?

    我的问题已部分得到解答 因此我根据从评论和其他实验中学到的知识对其进行了修改 总之 我想要一个用于编程竞赛的快速 I O 例程 其中使用单个文件解决问题 无需外部包 它应该从一个以空格分隔的标记序列中读取BufRead 标准输入或文件 标记
  • Golang中按长度分割字符串

    有谁知道如何在 Golang 中按长度分割字符串 例如 每 3 个字符分割 helloworld 那么理想情况下它应该返回一个 hel low orl d 数组 或者 一个可能的解决方案是在每 3 个字符后附加一个换行符 所有的想法都非常感
  • 将 ftransform 与折叠 R 包中的 fgroup_by 一起使用

    我正在尝试重现以下输出dplyr代码与R包裹collapse dplyr Code library tidyverse starwars gt select name mass species gt group by species gt
  • 正则表达式获取字符串中的第一个数字和其他字符

    我是正则表达式的新手 想知道如何才能只获取字符串中的第一个数字 例如100 2011 10 20 14 28 55 在这种情况下 我希望它返回100 但该数字也可以更短或更长 我在想类似的事情 0 9 但它单独获取每个数字 100 2001
  • R - 计算 bin 中特定值的数量

    我有一个如下所示的数据框 df Value lt c 1 1 0 2 1 3 4 0 0 1 2 0 3 0 4 5 2 3 0 6 Sl lt c 1 20 df lt data frame Sl Value gt df Sl Value
  • Perl 正则表达式图灵完备吗?

    我见过 Ruby 和 Perl 程序员做了一些事情复杂的代码挑战 https codegolf stackexchange com questions 3596 regex validating regex完全用正则表达式 这前瞻和后瞻 h
  • 警告消息 - 来自 dummies 包的 dummy

    我正在使用 dummies 包为分类变量生成虚拟变量 其中一些变量具有两个以上类别 testdf lt data frame A as factor c 1 2 2 3 3 1 B c A B A B C C C c D D E D D E
  • 扩展 RegExp 以获取文件扩展名

    我知道 已经有很多基于 RegExp 的解决方案 但是我找不到适合我需求的解决方案 我有以下函数来获取 URL 的各个部分 但我还需要文件扩展名 var getPathParts function url var m url match w
  • XSL字符串多重替换功能

    如何让这个函数进行多重替换 经验 替换aaa with 111并替换bbb with 222 etc
  • 绘制 Cox 回归的 Kaplan-Meier 图

    我使用 R 中的以下代码设置了一个 Cox 比例风险模型来预测死亡率 添加协变量 A B 和 C 只是为了避免混淆 即年龄 性别 种族 但我们真正对预测变量 X 感兴趣 X 是一个连续变量 cox model lt coxph Surv t

随机推荐