昨天我问了一个问题。基于条件的复数序列
感谢帮助我解决这个问题的人,我的最小例子是
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,我正在努力学习。
在 data.table
,我们可以使用 .N
在 rep_len
并指派(:=
),按ID分组后创建新列。
library(data.table)
setDT(data)[, PolYr := rep_len(v, .N), by = ID]