如何在R语言中按第二个小数点拆分数据列?
按第二个小数点拆分R语言tibble列的实现方法
针对你需要将tibble的sample列按第二个小数点拆分出col1和col2的需求,以下是几种可行的实现方式:
方法1:使用tidyr::separate(tidyverse推荐方案)
通过正则表达式精准匹配第二个小数点,结合separate函数完成拆分,同时保留原列:
library(dplyr) library(tidyr) # 构造数据集 df <- tibble(sample=c("AM.F10.T1", "AM.F10.T2","DA.AD.1","DA.AD.2", "ES.AD.1")) # 拆分列 df_processed <- df %>% separate( sample, into = c("col1", "col2"), sep = "(?<=\\..*)\\.", # 正则匹配第二个小数点 extra = "merge", # 将第二个小数点后的所有内容合并到col2 remove = FALSE # 保留原sample列 ) print(df_processed)
执行结果:
# A tibble: 5 × 3 sample col1 col2 <chr> <chr> <chr> 1 AM.F10.T1 AM.F10 T1 2 AM.F10.T2 AM.F10 T2 3 DA.AD.1 DA.AD 1 4 DA.AD.2 DA.AD 2 5 ES.AD.1 ES.AD 1
方法2:使用stringr处理拆分后的片段
先将字符串按小数点拆分为多段,再合并前两段为col1,第三段作为col2:
library(dplyr) library(stringr) df <- tibble(sample=c("AM.F10.T1", "AM.F10.T2","DA.AD.1","DA.AD.2", "ES.AD.1")) df_processed <- df %>% mutate( # 拆分字符串为矩阵形式的片段 parts = str_split(sample, "\\.", simplify = TRUE), # 合并前两段为col1 col1 = str_c(parts[, 1], parts[, 2], sep = "."), # 取第三段为col2 col2 = parts[, 3] ) %>% # 调整列顺序 select(sample, col1, col2) print(df_processed)
方法3:Base R原生实现
无需加载额外包,用strsplit和sapply完成拆分与合并:
df <- tibble(sample=c("AM.F10.T1", "AM.F10.T2","DA.AD.1","DA.AD.2", "ES.AD.1")) # 拆分每个字符串为片段列表 parts_list <- strsplit(df$sample, "\\.") # 生成col1和col2列 df$col1 <- sapply(parts_list, function(x) paste(x[1:2], collapse = ".")) df$col2 <- sapply(parts_list, function(x) x[3]) print(df)
以上三种方法均能得到你期望的输出结构。
内容的提问来源于stack exchange,提问作者Corrector
相关产品推荐
相关产品推荐

