您基本上需要按客户名称拆分数据集,然后根据每个客户的数据创建新的数据框.我们通过在开始年份添加0:(Years-1)来完成此操作.-1表示起始年份.最后,我们将这些绑定在一起.我们可以在base-R中执行此操作:
res <- do.call(rbind,lapply(split(df,df$CustName),function(x){ res <- data.frame(custName=x$CustName, Year=x$MinYear+0:(x$Years-1)) res })) # > res # custName Year # a.1 a 1995 # a.2 a 1996 # a.3 a 1997 # a.4 a 1998 # b.1 b 1992 # b.2 b 1993 # c c 1998
我们可以对data.table做同样的事情,使代码更具可读性:
library(data.table) DT <- as.data.table(df) res <- DT[,.(Year=MinYear+0:(Years-1)),CustName]