Загрузите tarball , перенесите его на свой компьютер FreeBSD и извлеките его, затем запустите python setup.py install
, и все готово!
EDIT: просто чтобы добавить к этому, вы также можете установить tarballs с помощью pip.
Вы могли бы сделать
out <- DT[, .(col = seq.int(Start_year, 2015L)), by = ID]
out
# ID col
# 1: 1 1999
# 2: 1 2000
# 3: 1 2001
# 4: 1 2002
# 5: 1 2003
# 6: 1 2004
# 7: 1 2005
# 8: 1 2006
# 9: 1 2007
# ...
В вашем случае вам, вероятно, потребуется сделать
setDT(df)[, .(col = seq.int(Start_year, 2015L)), by = ID]
<час> tidyverse
способ той же идеи
данные
text <- "ID Start_year
01 1999
02 2004
03 2015
04 2007"
library(data.table)
DT <- fread(text)
Если у вас достаточно памяти, вы можете взять полный набор идентификаторов х лет и отфильтровать с помощью скользящего соединения:
res <- DT[
CJ(ID, Start_year = seq.int(min(Start_year), 2015L)),
on=.(ID, Start_year),
roll=TRUE,
nomatch=0
]
setnames(res, "Start_year", "Year")[]
CJ
принимает «перекрестное соединение» вектора идентификаторов и лет , Если вы не используете последнюю версию data.table, вам может потребоваться назвать оба аргумента (например, CJ(ID = ID, Start_year = seq.int(min(Start_year), 2015L))
).
Комментарий . ОП говорит, что подход @markus уже сводит операцию к секундам, поэтому, возможно, дальнейшее улучшение не требуется ... Кроме того, я не совсем уверен, что есть какие-то обстоятельства, при которых мой подход будет быстрее.
решение может быть:
df <- data.table::fread("
ID Start_year
01 1999
02 2004
03 2015
04 2007")
library(padr)
library(tidyverse)
df %>%
pad_int('Start_year',
end_val = 2015,
group = "ID")