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

R语言数据清洗求助:拆分departure_info与提取price数值

数据清洗解决方案(针对航班数据拆分与价格提取)

先修正字段拼写错误

你的数据里departue_info是拼写错误,先改成departure_info,后续基于这个修正后的字段处理。


1. 拆分出发信息为时间和日期,处理多值行

原数据中departure_info是字符串格式的列表,先把它拆成单独的条目,再提取时间和日期:

library(tidyverse)

# 修正字段名
df1 <- df1 %>% rename(departure_info = departue_info)

# 拆分多值行并提取时间、日期
df_clean <- df1 %>%
  # 将字符串列表拆成多列,再转成多行
  unnest_wider(departure_info, names_sep = "_") %>%
  pivot_longer(cols = starts_with("departure_info_"), 
               names_to = NULL, values_to = "departure_info") %>%
  drop_na(departure_info) %>%
  # 正则提取时间和日期
  mutate(
    departure_info_time = str_extract(departure_info, "\\d{2}:\\d{2} [ap]m"),
    departure_info_day = str_extract(departure_info, "[A-Za-z]{2} \\d{2} [A-Za-z]{3}")
  ) %>%
  select(-departure_info)

2. 提取价格数字,匹配多值行

同样处理price字段,拆分多值后提取数字,忽略特殊字符:

df_clean <- df_clean %>%
  # 拆分价格的字符串列表为多行,和出发信息条目对应
  unnest_wider(price, names_sep = "_") %>%
  pivot_longer(cols = starts_with("price_"), 
               names_to = NULL, values_to = "price") %>%
  drop_na(price) %>%
  # 提取数字并转为数值型
  mutate(price = as.numeric(str_extract(price, "\\d+")))

关键逻辑说明

  • 多值行处理:用unnest_wider+pivot_longer把包含多个出发时间/价格的行拆成单独观测,这样每个时间对应一个价格,适合后续做趋势散点图。
  • 正则匹配规则:
    • 时间:\\d{2}:\\d{2} [ap]m精准匹配"hh:mm am/pm"格式;
    • 日期:[A-Za-z]{2} \\d{2} [A-Za-z]{3}匹配"Sa 19 Feb"这类日期格式;
    • 价格:\\d+提取所有连续数字,自动忽略后面的<U+0080>特殊字符。

最终数据示例

处理后的数据结构(以FRA-OSL航班为例):

depart destination departure_info_time departure_info_day price
1    FRA         OSL           10:25 am         Sa 19 Feb   249
2    FRA         OSL           16:10 am         Sa 19 Feb   249
3    FRA         OSL           21:40 am         Sa 19 Feb   249
4    FRA         OSL           10:25 am         Sa 19 Feb   419

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 10:45:44