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

R语言中按ID分组从两列提取唯一值生成新列的方法

按ID分组生成combination列的解决方案

原始数据

df <- data.frame(
  ID = c(1,1,1,2,2,2,2),
  first = c(14,14,14,20,20,20,20),
  second = c(16,16,16,32,32,32,32)
)

需求说明

创建名为combination的新列,按ID分组后,将每组first和second的唯一值依次填充到该列中,剩余行留空,预期结果如下:

ID first second combination
1  1    14     16          14
2  1    14     16          16
3  1    14     16            
4  2    20     32          20
5  2    20     32          32
6  2    20     32            
7  2    20     32            

原有代码问题分析

你之前使用case_when的逻辑是逐行判断填充,会让每行都返回first或second,无法实现“依次填充唯一值、剩余行留空”的目标。

解决方案代码

方法1:填充NA(保持数值型)

library(dplyr)

df <- df %>%
  group_by(ID) %>%
  # 提取组内first和second的唯一值,剩余行补NA
  mutate(combination = c(unique(c(first, second)), rep(NA, n() - length(unique(c(first, second)))))) %>%
  ungroup()

方法2:填充空字符串(匹配预期显示格式)

如果需要和预期结果一样显示为空而非NA,可转换为字符型:

library(dplyr)

df <- df %>%
  group_by(ID) %>%
  mutate(combination = as.character(c(unique(c(first, second)), rep("", n() - length(unique(c(first, second))))))) %>%
  ungroup()

代码逻辑说明

  • group_by(ID):按ID分组处理每组数据
  • unique(c(first, second)):提取当前组内first和second的所有唯一值(本例中每组两列值固定,会得到两个元素的向量)
  • rep(..., n() - length(...)):生成与组内剩余行数一致的填充值(NA或空字符串)
  • c(...):将唯一值和填充值拼接成与组内行数匹配的向量,实现依次填充的效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 06:20:53