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

R语言实现匹配变量按逆时序合并同行功能求助

解决方案

先确保你安装并加载了dplyr和tidyr这两个常用数据处理包,新手用这个组合上手快:

install.packages(c("dplyr", "tidyr"))
library(dplyr)
library(tidyr)

先模拟你的数据结构

假设你的数据框叫var_info,结构大概是这样(你可以替换成自己的实际列名):

var_info <- data.frame(
  Variable_Name = c("age", "gender", "age", "income", "gender"),
  Category_Count = c(80, 2, 90, 10, 2),
  Format = c("%d", "%s", "%d", "%d", "%s"),
  Label = c("年龄", "性别", "年龄(新版)", "收入", "性别"),
  Survey_Year = c(2018, 2020, 2022, 2020, 2018)
)

编写目标函数

这个函数接收两个参数:你的数据框df,以及要匹配合并的变量名向量target_vars:

merge_vars_by_year <- function(df, target_vars) {
  # 处理需要合并的目标变量
  merged_part <- df %>%
    filter(Variable_Name %in% target_vars) %>%
    group_by(Variable_Name) %>%
    # 按调查年份逆序排序,最新的排在前面
    arrange(desc(Survey_Year), .by_group = TRUE) %>%
    # 给每组内的行加序号,从1开始
    mutate(row_num = row_number()) %>%
    ungroup() %>%
    # 转成宽格式,生成带序号的列名
    pivot_wider(
      names_from = row_num,
      values_from = c(Variable_Name, Category_Count, Format, Label, Survey_Year),
      names_glue = "{.value}_{row_num}"
    )
  
  # 处理不需要合并的变量(未匹配的)
  unmerged_part <- df %>%
    filter(!Variable_Name %in% target_vars)
  
  # 合并两部分,自动对齐列,缺失值补NA
  bind_rows(merged_part, unmerged_part)
}

测试函数

比如你要合并age和gender这两个变量:

result <- merge_vars_by_year(var_info, target_vars = c("age", "gender"))
print(result)

运行后你会看到:

  • age的两条记录按2022、2018逆序合并成一行,列名变成Variable_Name_1(值为age)、Survey_Year_1(2022)、Variable_Name_2(age)、Survey_Year_2(2018)等
  • gender的两条记录按2020、2018逆序合并成一行
  • income因为不在目标变量里,保持单独一行

注意事项

  • 如果你的实际列名和示例不一样,要把函数里的Variable_Name、Survey_Year等替换成你数据里的真实列名
  • 如果同一个变量在同一年有多个记录,函数会按原顺序保留,你可以在arrange里加更多排序条件调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 08:33:22