基于ID反转时间列的R语言实现需求
按ID分组反转time列的解决方案
你需要按ID分组,对每组的time值进行反转,生成time_reverse列。以下是两种高效的实现方法:
可复现示例数据
df <- data.frame( id = rep(c(1, 2, 3, 4, 5), times = c(3, 1, 5, 2, 7)), time = c(1, 2, 3, 1, 1, 2, 3, 4, 5, 1, 2, 1, 2, 3, 4, 5, 6, 7), time_reverse = sample(NA, size = 18, replace = TRUE) )
方法1:使用dplyr(tidyverse生态)
dplyr的分组操作语法直观,适合大多数常规场景:
library(dplyr) df <- df %>% group_by(id) %>% mutate(time_reverse = rev(time)) %>% ungroup()
方法2:使用data.table(大数据量更高效)
如果你的数据集规模较大,data.table的分组运算速度更优,能满足"快速创建"的需求:
library(data.table) setDT(df) df[, time_reverse := rev(time), by = id]
结果验证
处理后每组的time_reverse会对应ID的time列反转结果,比如:
- ID=1的
time序列(1,2,3)会被反转为(3,2,1) - ID=3的
time序列(1,2,3,4,5)会被反转为(5,4,3,2,1)
内容的提问来源于stack exchange,提问作者Til Baum
相关产品推荐
相关产品推荐

