You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 15:55:29