如何利用R数据集的DAYS列生成对应的start、end两列
R语言按分组生成start、end列实现方法
你可以通过两种常用方式实现该需求:
方法1:使用dplyr包(代码简洁易读)
# 未安装包先运行 install.packages("dplyr") library(dplyr) mydata_result <- mydata %>% # 按Id分组 group_by(Id) %>% mutate( # lag取上一行DAYS值,首行默认补0 start = lag(DAYS, default = 0), end = DAYS ) %>% # 取消分组 ungroup() %>% # 调整列顺序和目标结构一致 select(Id, start, end, QS, Event)
方法2:基础R实现(无需额外安装依赖包)
# 按Id分组计算start列 mydata$start <- ave(mydata$DAYS, mydata$Id, FUN = function(x) c(0, x[-length(x)])) # end列直接等于DAYS mydata$end <- mydata$DAYS # 调整列顺序 mydata_result <- mydata[, c("Id", "start", "end", "QS", "Event")]
运行两种方法得到的结果都和你给出的预期结构完全一致。
内容的提问来源于stack exchange,提问作者Katie
相关产品推荐
相关产品推荐

