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

如何按最后一个空格分隔符拆分R数据框的Metric列?

拆分R数据框Metric列生成新列的解决方案

我明白你遇到的问题了——你想把Metric列拆分成「指标名称」和「Line」部分,同时保留原来的Values列,但是用str_split_fixed按空格拆成3份的方法没达到预期。咱们一起来解决这个问题:

原始数据框

df = data.frame(Metric = c("Profit before tax 240", "Earnings per share 0.240" , "EBITDA Margin 37%"), Values =c(5, 1, 3))

展示效果:

Metric                Values
Profit before tax 240 5
Earnings per share 0.240 1
EBITDA Margin 37%     3

期望的目标结构

你想要生成包含Metric(指标文本)、Values(原数值)、Line(后面的数字/百分比)的三列数据框,大致如下:

Metric Values   Line
1  Profit before tax      5    240
2 Earnings per share      1 0.240
3       EBITDA Margin      3    37%

为什么str_split_fixed(df$Metric, " ", 3)不行?

这个函数是按空格固定拆分3份,比如第一行会拆成["Profit", "before", "tax 240"],这显然不是你想要的——你需要的是把最后一个空格前面的所有文本作为Metric,后面的内容作为Line,而不是按固定数量拆分。

可行的解决方案

这里提供两种简单的实现方法,都依赖stringr包(你已经在使用了),也可以结合tidyr让代码更简洁:

方法1:用tidyr::separate结合正则拆分

利用正则匹配「最后一个空格」,把Metric列拆分成两部分:

library(tidyr)
library(stringr)

# 原始数据
df = data.frame(Metric = c("Profit before tax 240", "Earnings per share 0.240" , "EBITDA Margin 37%"), Values =c(5, 1, 3))

# 拆分Metric列,sep参数用正则匹配最后一个空格
df_new <- df %>%
  separate(Metric, into = c("Metric", "Line"), sep = "\\s(?=[^\\s]+$)", extra = "merge")

# 查看结果
print(df_new)

输出结果:

Metric   Line Values
1  Profit before tax    240      5
2 Earnings per share 0.240      1
3       EBITDA Margin    37%      3

方法2:用stringr的提取/移除函数单独处理

如果你不想用tidyr,可以直接用stringr的函数分别提取Line和修改Metric:

library(stringr)

# 原始数据
df = data.frame(Metric = c("Profit before tax 240", "Earnings per share 0.240" , "EBITDA Margin 37%"), Values =c(5, 1, 3))

# 提取最后一个非空格部分作为Line列
df$Line <- str_extract(df$Metric, "\\S+$")
# 移除Metric列最后一个空格及后面的内容,得到纯指标名称
df$Metric <- str_remove(df$Metric, "\\s+\\S+$")

# 调整列顺序为你想要的Metric、Values、Line
df_new <- df[, c("Metric", "Values", "Line")]

# 查看结果
print(df_new)

这个方法也能得到和上面完全一样的结果。

补充说明

  • 正则\\s(?=[^\\s]+$)的意思是:匹配一个空格,且这个空格后面跟着「非空格字符直到行尾」,也就是匹配最后一个空格。
  • str_extract(df$Metric, "\\S+$")是提取行尾的所有非空格字符,也就是你需要的Line部分。

内容的提问来源于stack exchange,提问作者Adni

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:14:35