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

使用dplyr将数据框NA值替换为同表关联城市的行程时长

用最近城市的行程时长填充NA值的解决方案

我来帮你搞定这个问题!下面我会用两种常用的R方法来实现你的需求:用closest列对应的城市的同目的地时长,替换原城市的NA值。

第一步:先模拟你的数据

首先我们先构造和你描述一致的示例数据框:

df <- data.frame(
  city = c("cityA", "cityB", "cityC", "cityD"),
  dest1 = c(NA, NA, 100, 300),
  dest2 = c(NA, NA, 200, 400),
  closest = c("cityC", "cityD", "cityA", "cityB"),
  stringsAsFactors = FALSE
)

方法一:用dplyr(tidyverse风格)

如果你习惯用tidyverse工具链,这个方法更清晰易读:

library(dplyr)

df_filled <- df %>%
  # 把原数据的城市和对应时长提取出来,重命名用于连接
  left_join(df %>% select(city, dest1_closest = dest1, dest2_closest = dest2),
            by = c("closest" = "city")) %>%
  # 用coalesce函数:如果原dest值不是NA就保留,否则用最近城市的对应值
  mutate(
    dest1 = coalesce(dest1, dest1_closest),
    dest2 = coalesce(dest2, dest2_closest)
  ) %>%
  # 移除临时生成的辅助列
  select(-dest1_closest, -dest2_closest)

运行后df_filled的结果就是你想要的:

city dest1 dest2 closest
1 cityA   100   200   cityC
2 cityB   300   400   cityD
3 cityC   100   200   cityA
4 cityD   300   400   cityB

方法二:用Base R(无需额外包)

如果你不想加载额外的包,用Base R的match函数也能快速实现:

# 处理dest1列
df$dest1 <- ifelse(is.na(df$dest1), df$dest1[match(df$closest, df$city)], df$dest1)
# 处理dest2列
df$dest2 <- ifelse(is.na(df$dest2), df$dest2[match(df$closest, df$city)], df$dest2)

这里match(df$closest, df$city)会返回每个closest城市在原数据框中的行索引,然后用这个索引提取对应的时长值,替换原列的NA。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:08:12