Более быстрый эквивалент group_by% >% в R

Загрузите tarball , перенесите его на свой компьютер FreeBSD и извлеките его, затем запустите python setup.py install, и все готово!

EDIT: просто чтобы добавить к этому, вы также можете установить tarballs с помощью pip.

3
задан rw2 11 March 2019 в 13:57
поделиться

3 ответа

Вы могли бы сделать

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 способ той же идеи

[112 ]

данные

text <- "ID    Start_year
01          1999
02          2004
03          2015
04          2007"

library(data.table)
DT <- fread(text)
0
ответ дан markus 11 March 2019 в 13:57
поделиться

Если у вас достаточно памяти, вы можете взять полный набор идентификаторов х лет и отфильтровать с помощью скользящего соединения:

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 уже сводит операцию к секундам, поэтому, возможно, дальнейшее улучшение не требуется ... Кроме того, я не совсем уверен, что есть какие-то обстоятельства, при которых мой подход будет быстрее.

0
ответ дан Frank 11 March 2019 в 13:57
поделиться

решение может быть:

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")
0
ответ дан davsjob 11 March 2019 в 13:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: