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

使用pivot_longer时如何为新增行生成新ID并添加至现有ID列

问题描述

我正在使用tidyverse中的pivot_longer将宽格式数据重构为长格式。现有数据每行包含一个ID列,但转换为长格式后会新增行,我希望为这些新增行生成新ID并替换原ID列。

原始简化数据

IDCensusTab1Tab2Tab3
1t1101
2t1101
3t1000
4t2110
5t2110
6t2110

期望转换后的长格式数据

IDCensusTab_IDScore
1t111
1001t120
2001t131
2t111
1002t120
2002t131

我已完成转长操作,但不知道如何为新增行生成新ID,当前代码:

long <- df %>% pivot_longer(cols = 3:5, names_to = 'Tab_ID', names_prefix = "Tab", values_to = 'Score')

解决方案

观察你期望的ID生成规则:原ID + (Tab_ID - 1) * 1000,对应逻辑:

  • Tab_ID=1时,ID保留原始值
  • Tab_ID=2时,ID为1000 + 原ID
  • Tab_ID=3时,ID为2000 + 原ID

基于这个规则,在转长后添加ID计算逻辑即可,修改后的完整代码:

library(tidyverse)

long <- df %>%
  pivot_longer(cols = 3:5, names_to = 'Tab_ID', names_prefix = "Tab", values_to = 'Score') %>%
  # 将Tab_ID转换为整数类型,确保计算正常
  mutate(Tab_ID = as.integer(Tab_ID),
         # 按规则生成新ID
         ID = ID + (Tab_ID - 1) * 1000)

说明

  1. pivot_longer环节保留你原有的逻辑,通过names_prefix自动去除Tab前缀,得到纯数字的Tab_ID
  2. 转换Tab_ID为整数是为了避免字符型数据无法参与算术运算
  3. 如果后续ID生成规则有调整,只需修改ID = ...中的计算表达式即可适配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:57:48