带条件的数字序列(续)。一个data.table的解决方案?

问题描述 投票:0回答:1

昨天我问了一个问题。基于条件的复数序列

感谢帮助我解决这个问题的人,我的最小例子是

library(dplyr)    
ID = c(101, rep(102, 2), rep(103,5))
    start = as.Date(c('2/1/2010', rep('5/17/2011', 2), rep('5/17/2011', 5)), '%m/%d/%Y')
    end = as.Date(c('3/5/2010', rep('1/4/2012', 2 ), rep('8/4/2013', 5 )), '%m/%d/%Y')
    data = data.frame(ID = ID, start = start, end = end)

    v = c(0,1)
    data = data %>% group_by(ID) %>% mutate(PolYr = rep_len(v, length(ID)))
    data

现在我希望有人能帮我解决这部分代码。

v = c(0,1)
data = data %>% group_by(ID) %>% mutate(PolYr = rep_len(v, length(ID)))

代码可以运行。然而,在我的真实数据上,有200多万行数据和几十万个ID,经过的时间是2297.74.我希望有人能建议一种更快的方法,也许是用data.table,我正在努力学习。

r dplyr data.table
1个回答
2
投票

data.table,我们可以使用 .Nrep_len 并指派(:=),按ID分组后创建新列。

library(data.table)
setDT(data)[, PolYr := rep_len(v, .N), by = ID]
© www.soinside.com 2019 - 2024. All rights reserved.