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

R语言如何仅对指定行应用separate拆分列值并写入已有列

R数据拆分修复方案

先将你提供的示例数据赋值为数据框df:

df <- structure(list(Rank = c("23", "24", "25", "26"), `Race Number` = c("13", 
"11", "29", "30"), Name = c("FOSS Tobias S.", "McNULTY Brandon", 
"BENNETT George", "KUKRLE Michael"), `NOC Code` = c("NOR", "USA", 
"NZL", "CZE"), `Split 1 at 9.7km` = c("13:47.65(22)", "13:28.23(15)", 
"14:05.46(30)", "14:05.81(32)"), `Split 2 at 15.0km` = c("19:21.16(22)", 
"19:04.80(18)", "19:47.53(31)", "19:48.77(32)"), `Split 3 at 22.1km` = c("29:17.44(24)", 
"29:01.94(20)", "29:58.88(28)", "29:58.09(27)"), `Split 4 at 31.8km` = c("44:06.82(24)", 
"43:51.67(23)", "44:40.28(25)", "44:42.74(26)"), `Split 5 at 37.1km` = c("49:49.65(24)", 
"49:40.49(23)", "50:21.82(25)1:00:28.39 (25)", "50:30.02(26)1:00:41.55 (26)"
), `Final Time` = c("59:51.68 (23)", "59:57.73 (24)", "", ""), 
    `Time Behind` = c("+4:47.49", "+4:53.54", "+5:24.20", "+5:37.36"
    ), `Average Speed` = c("44.302", "44.228", "43.854", "43.696"
    )), class = "data.frame", row.names = c(NA, -4L))

解法1:基于separate的分组合并法(适配你已知的separate用法)

思路是拆分正常行和异常行,仅对异常行执行拆分操作,再合并恢复原顺序:

library(tidyverse)

# 筛选Final Time非空的正常行
df_normal <- df %>% 
  filter(`Final Time` != "")

# 筛选Final Time为空的异常行,拆分Split 5列补全Final Time
df_abnormal <- df %>% 
  filter(`Final Time` == "") %>%
  # 以右括号后为拆分点,将拼接的两部分拆分到对应列
  separate(`Split 5 at 37.1km`, 
           into = c("Split 5 at 37.1km", "Final Time"), 
           sep = "(?<=\\))")

# 合并两类数据并按Rank排序恢复原顺序
df_clean <- bind_rows(df_normal, df_abnormal) %>% 
  arrange(as.numeric(Rank))

解法2:全量正则匹配法(更简洁)

不需要拆分数据集,通过正则匹配拆分内容,仅对异常行执行替换:

library(tidyverse)

df_clean <- df %>%
  mutate(
    # 匹配Split 5的两部分:第一组为标准Split5格式,第二组为拼接的Final Time
    tmp = str_match(`Split 5 at 37.1km`, "^(\\d+:\\d+\\.\\d+\\(\\d+\\))(.*)$"),
    `Split 5 at 37.1km` = ifelse(`Final Time` == "", tmp[,2], `Split 5 at 37.1km`),
    `Final Time` = ifelse(`Final Time` == "", tmp[,3], `Final Time`)
  ) %>%
  select(-tmp)

两种方法处理后得到的df_clean就是修正完成的数据,第3、4行的Split 5和Final Time列均已拆分补全。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 22:57:03