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

如何在R中基于另一数据框按Zone Code替换列中的NA值

解决方法:替换数据框中的NA街道名称

下面给你两种适合新手的R语言实现方式,按需选择:

方法一:使用tidyverse(dplyr)包

这种方法代码可读性强,适合后续拓展更多数据处理操作:

首先构造示例数据(如果已经有现成数据可跳过这步):

df <- data.frame(
  Zone_Code = c(1, 2, 3),
  STREET = c("St. John St.", NA, NA),
  stringsAsFactors = FALSE
)

street_df <- data.frame(
  Zone_Code = c(1, 2, 3),
  STREET = c("St. John St.", "Roxbury St.", "MJ Ave."),
  stringsAsFactors = FALSE
)

加载dplyr包并执行替换:

library(dplyr)

# 按Zone_Code合并两个数据框,区分原街道列和完整街道列
df_updated <- df %>%
  left_join(street_df, by = "Zone_Code", suffix = c("_original", "_full")) %>%
  # 优先保留原街道的非NA值,原是NA则用完整街道值填充
  mutate(STREET = coalesce(STREET_original, STREET_full)) %>%
  # 只保留需要的两列
  select(Zone_Code, STREET)

方法二:使用基础R(无需额外安装包)

如果不想安装第三方包,用基础R函数就能完成:

同样先构造示例数据(已有数据可跳过):

df <- data.frame(
  Zone_Code = c(1, 2, 3),
  STREET = c("St. John St.", NA, NA),
  stringsAsFactors = FALSE
)

street_df <- data.frame(
  Zone_Code = c(1, 2, 3),
  STREET = c("St. John St.", "Roxbury St.", "MJ Ave."),
  stringsAsFactors = FALSE
)

执行替换操作:

# 找到df中每个Zone_Code在street_df里对应的位置索引
match_pos <- match(df$Zone_Code, street_df$Zone_Code)

# 筛选出df中STREET为NA的行,用street_df对应位置的街道名替换
df$STREET[is.na(df$STREET)] <- street_df$STREET[match_pos[is.na(df$STREET)]]

两种方法最终得到的结果一致:

Zone_CodeSTREET
1St. John St.
2Roxbury St.
3MJ Ave.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 17:42:20