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

如何高效为R语言dataframe批量添加缺失变量?

批量补充R数据框中缺失的前缀-年份变量

现有R数据框raw_data_2,变量命名规则为「前缀_年份」(比如a_2022、b_2023),但部分年份下的前缀变量缺失,需要批量补充这些缺失变量(值为NA)生成raw_data_2_fixed,无需手动逐个添加变量,以下是高效实现方案。

原始数据

library(tidyverse)
raw_data_2 <- data.frame(category=c('A','B','C'),
                      a_2022=c(1,2,3),
                      b_2022=c(0.1,0.4,0.3),
                      a_2023=c(1.5,3,4),
                      e_2023=c(0.3,0.7,0.5)
                      )

期望输出

raw_data_2_fixed <- data.frame(category=c('A','B','C'),
                      a_2022=c(1,2,3),
                      b_2022=c(0.1,0.4,0.3),
                      e_2022=c(NA,NA,NA),
                      a_2023=c(1.5,3,4),
                      b_2023=c(NA,NA,NA),
                      e_2023=c(0.3,0.7,0.5)
                      )

高效实现代码

利用tidyverse的pivot_longer、complete和pivot_wider函数自动补全所有缺失的变量组合,无需手动指定变量名:

raw_data_2_fixed <- raw_data_2 %>%
  # 将宽表转长表,拆分变量名为前缀和年份
  pivot_longer(
    cols = -category,
    names_to = c("prefix", "year"),
    names_sep = "_",
    values_to = "value"
  ) %>%
  # 补全所有前缀与年份的组合,按category分组保留原有数据
  complete(prefix, year, nesting(category)) %>%
  # 转回宽表,恢复「前缀_年份」的变量命名格式
  pivot_wider(
    names_from = c(prefix, year),
    values_from = value,
    names_sep = "_"
  ) %>%
  # 按年份和前缀排序列(可选,让列顺序与示例一致)
  select(category, matches("_2022"), matches("_2023"))

代码说明

  1. 转长表:把除category外的列转换为长格式,拆分变量名得到前缀(a、b、e)和年份(2022、2023)。
  2. 补全组合:自动生成所有前缀与年份的可能组合,缺失的组合对应值填充为NA。
  3. 转回宽表:将长表还原为宽表,自动生成所有缺失的变量列。
  4. 列排序:可选步骤,让列按年份分组排列,和示例输出的列顺序一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 23:04:57