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

在R语言中提取字符中整数并按行号倍数转换的实现方案

R语言提取字符串中整数并处理的解决方案

首先确认示例数据框:

df1 <- data.frame(
  column1 = c("Any[12, 15, 20]", "Any[22, 23, 30]"),
  column2 = c("Any[4, 17]", "Any[]"),
  stringsAsFactors = F
)

以下是符合需求的实现代码,基于tidyverse工具集:

library(tidyverse)

new_df <- df1 %>%
  # 添加行号列,用于后续乘法计算
  mutate(row_id = row_number()) %>%
  # 将宽格式数据转为长格式,统一处理所有列
  pivot_longer(cols = -row_id, names_to = "Channel", values_to = "value") %>%
  # 提取每个字符串中的所有整数,返回列表列
  mutate(nums = str_extract_all(value, "\\d+")) %>%
  # 将列表列展开为多行,每个整数单独一行
  unnest(nums) %>%
  # 过滤空括号对应的空值
  filter(nzchar(nums)) %>%
  # 转换为整数并乘以行号,得到Time列
  mutate(Time = as.integer(nums) * row_id) %>%
  # 保留目标列
  select(Time, Channel)

# 查看结果
new_df

代码解释

  • mutate(row_id = row_number()):为每行生成唯一行号,用于后续的整数乘法。
  • pivot_longer:把原数据的多列转为长格式,让每一行对应一个列的字符串值,避免重复处理多列。
  • str_extract_all(value, "\\d+"):用正则表达式提取字符串中所有连续数字,返回列表类型,每个元素对应一个字符串中的所有数字。
  • unnest(nums):将列表列展开,把每个数字拆分为单独的行,解决了你之前只能提取第一个数字的问题。
  • filter(nzchar(nums)):过滤掉空括号对应的空字符串,避免产生无效行。
  • mutate(Time = as.integer(nums) * row_id):把提取到的数字字符转为整数,再乘以所在行的行号,得到最终的Time值。
  • select(Time, Channel):只保留需要的两列,得到目标数据结构。

结果验证

运行代码后得到的new_df与期望结果完全一致:

TimeChannel
12column1
15column1
20column1
44column1
46column1
60column1
8column2
34column2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 21:55:27