【问题标题】:Remove characters including and after third hyphen删除包括第三个连字符在内的字符
【发布时间】:2021-11-20 19:10:40
【问题描述】:

我有一个数据框df 并想删除所有内容,包括“case_id”列中的第三个“-”之后的所有内容:

df

case_id             unit

TCGA-3A-01-03-9441  27  
TCGA-9C-01-04-9641  15
TCGA-1E-01-05-9471  6

这是所需的输出:

df

case_id     unit

TCGA-3A-01  27  
TCGA-9C-01  15
TCGA-1E-01  6

【问题讨论】:

  • 否,因为这实际上是第二次出现,并且不在 df 的上下文中
  • 嗯,是的,标题具有误导性。我的错。
  • 这是同一个问题。您只需要在正则表达式模式中添加另一个 *-[^-],因为您想要使用 3 个连字符,而不是 2 个。要将函数应用于数据帧的每一行,您可以使用 mutate 或应用函数。重复这个问题,完整的命令如下:mutate(df, case_id = gsub("^([^-]*-[^-]*-[^-]*).*", "\\1", case_id))
  • 如果是固定格式也可以使用substr(df$case_id,1,10)

标签: r string


【解决方案1】:

我们可以使用str_replace

library(stringr)
library(dplyr)
df1 %>% 
   mutate(case_id = str_replace(case_id, "^(([^-]+-){2}[^-]+)-.*", "\\1"))

-输出

      case_id unit
1 TCGA-3A-01   27
2 TCGA-9C-01   15
3 TCGA-1E-01    6

数据

df1 <- structure(list(case_id = c("TCGA-3A-01-03-9441", "TCGA-9C-01-04-9641", 
"TCGA-1E-01-05-9471"), unit = c(27L, 15L, 6L)),
 class = "data.frame", row.names = c(NA, 
-3L))

【讨论】:

    猜你喜欢
    • 2012-11-28
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    • 2019-04-13
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 2015-12-04
    相关资源
    最近更新 更多