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

R语言如何按年度分组条件填充数据框指定字段NA值

R语言按年份分组填充J车型销量缺失值实现方案
  • 你构造的测试数据中sales列的缺失值为字符串格式的"NA",并非R原生识别的缺失值,且整列存储为字符类型,无法直接做数值计算,需要先做类型转换:
# 将sales列转为数值类型,字符串"NA"会自动转换为R识别的缺失值NA
df$sales <- as.numeric(df$sales)

方法1:基础R实现(无需安装第三方包)

核心逻辑是先按年份统计排除J车型后的年度最高销量,再匹配给对应年份的J车型做填充:

# 按年份分组,计算各年非J车型的最高销量
annual_max <- tapply(
  X = df$sales[df$model != "J"], 
  INDEX = df$Year[df$model != "J"], 
  FUN = max
)
# 匹配年份给J车型赋值:年度最高销量+100
df$sales[df$model == "J"] <- annual_max[as.character(df$Year[df$model == "J"])] + 100

方法2:dplyr包实现(代码可读性更强)

如果日常使用tidyverse生态做数据处理,可以用分组突变的逻辑直接完成填充,代码逻辑更直观:

library(dplyr)

df <- df %>%
  # 按年份分组
  group_by(Year) %>%
  mutate(
    sales = case_when(
      # 仅对J车型的缺失值执行填充规则,其余数据保持不变
      model == "J" & is.na(sales) ~ max(sales, na.rm = T) + 100,
      TRUE ~ sales
    )
  ) %>%
  # 解除分组
  ungroup()

填充结果校验:各年份J车型填充后的值分别为2015年1084、2016年2000、2017年877、2018年1103、2019年9011、2020年8988,完全符合「当年所有车型销量最大值加100」的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:09:14