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

如何修正R数据框列值错配问题并补全缺失值为NA?

R数据框值的跨列归类修复

先看原始错误分配的数据框:

df <- data.frame(
  price = c("1€", "1€", "2022-03-04", "4hr", "Iberia"),
  duration = c("2€", "1hr", "2022-01-02", "4hr", "Eurostart"),
  airline = c("3€", "1hr", "2022-01-03", "5min", "ITA"),
  dates = c("4€", "1hr 5min", "2022-01-03", "Air france", "Lufthansa")
)

我们需要将所有值正确归类到price、duration、airline、dates列,无对应值的位置用NA填充,期望输出如下:

desired_output <- data.frame(
  price = c("1€", "1€", "2€", "3€", "4€", NA),
  duration = c("1hr", "1hr", "1hr 5min", "4hr", "4hr", "5min"),
  airline = c("Air france", "Iberia", "Eurostart", "ITA", "Lufthansa", NA),
  dates = c("2022-03-04", "2022-01-02", "2022-01-03", "2022-01-03", NA, NA)
)

解决方案代码

核心思路是先把所有值提取成一维向量,再根据值的特征匹配到对应列:

# 1. 将数据框转成一维向量
all_values <- as.vector(t(df))

# 2. 按特征提取各列对应值
price_vals <- all_values[grepl("€", all_values)]
duration_vals <- all_values[grepl("hr|min", all_values)]
dates_vals <- all_values[grepl("^\\d{4}-\\d{2}-\\d{2}$", all_values)]
airline_vals <- all_values[!grepl("€|hr|min|^\\d{4}-\\d{2}-\\d{2}$", all_values)]

# 3. 统一各向量长度,用NA填充不足部分
max_len <- max(length(price_vals), length(duration_vals), length(airline_vals), length(dates_vals))
price_vals <- c(price_vals, rep(NA, max_len - length(price_vals)))
duration_vals <- c(duration_vals, rep(NA, max_len - length(duration_vals)))
airline_vals <- c(airline_vals, rep(NA, max_len - length(airline_vals)))
dates_vals <- c(dates_vals, rep(NA, max_len - length(dates_vals)))

# 4. 组合成目标数据框
result_df <- data.frame(
  price = price_vals,
  duration = duration_vals,
  airline = airline_vals,
  dates = dates_vals,
  stringsAsFactors = FALSE
)

运行后result_df就和期望输出一致,这里用R原生的NA(缺失值)替代了字符串"NA",更符合R数据规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 22:07:48