如何用Tidyverse/Dplyr为跨天重复的参与者生成唯一ID
生成跨天参与者的唯一连续标识
你的需求其实很容易实现,用基础的算术运算就能搞定,正好匹配你目前掌握的列操作技能。
核心逻辑
因为每个测试日固定有36个参与者(ID从1到36),5天总共180个唯一的「日期+参与者」组合,所以可以用这个公式直接计算唯一标识:
unique_id = (Day - 1) * 36 + participant_ID
- Day1的所有参与者,
(1-1)*36=0,所以ID1-36会被映射成1-36 - Day2的参与者,
(2-1)*36=36,ID1-36对应37-72 - 以此类推,Day5的最后一个参与者(ID36)会得到
(5-1)*36+36=180,刚好覆盖1到180的连续范围
具体代码实现
R语言版本
假设你的数据框名为df,直接新增列即可:
df$unique_id <- (df$Day - 1) * 36 + df$participant_ID
Python Pandas版本
如果用Python处理,代码如下:
df['unique_id'] = (df['Day'] - 1) * 36 + df['participant_ID']
验证示例
拿你提供的Day1数据来说,第一行的Day=1、participant_ID=1,计算后unique_id=1;第36行的participant_ID=33,结果是33,完全符合预期。如果是Day2的participant1,结果就是37,完美衔接Day1的最后一个标识36。
这个方法完全依赖你已经掌握的列运算,不需要任何复杂的分组或映射函数,简单高效。
内容的提问来源于stack exchange,提问作者dampfy
相关产品推荐
相关产品推荐

