уникальные строки в dplyr: row_number () из tbl_dt не соответствует tbl_df
en bref:
Мне интересно, как получить уникальные строки изdata.table
где-то вдольdplyr
рабочий процесс. Начиная с v0.2 я могу использоватьrow_number==1
(увидеть: Удалить дублированные строки с помощью dplyr)
НО!
tbl_df(data) %>% group_by(Var1,Var2) %>% filter(row_number() == 1)
работает.
tbl_dt(data) %>% group_by(Var1,Var2) %>% filter(row_number() == 1)
не делает.это ошибка?
library(dplyr)
library(data.table)
library(microbenchmark)
little <- expand.grid(rep(letters,121),rep(letters,121)) # my 10M row dataset.
tbl_dt(little) %>% group_by(Var1,Var2) %>% filter(row_number() == 1)
результат:> Error in rank(x, ties.method = "first") :
> argument "x" is missing, with no default
вот как я на самом деле нашел это бытьсломанный, Я спрашивал:
так или иначе?Я могу использоватьunique.data.table
метод:
dt_u <- function() {
tbl_dt(little) %>%
group_by(Var1,Var2) %>%
unique(.) %>%
tbl_dt(.) }
я могу использоватьsummarise
затемselect
прочь новый col:
dt_ss <- function() {
tbl_dt(little) %>%
group_by(Var1,Var2) %>%
summarise( n = n() ) %>%
select( -(n) ) }
я могу использоватьrow_number() == 1
# НЕ РАБОТАЕТ для tbl_dt!
dt_rn <- function() {
tbl_dt(little) %>%
group_by(Var1,Var2) %>%
filter( row_number() == 1 ) }
и так далее сtbl_df()
эквиваленты.
microbenchmark(...,times=20)
:> Unit: milliseconds
> expr min lq median uq max neval
> dt_ss() 579.0385 618.0002 661.9056 694.0705 764.2221 20
> dt_u() 690.1284 729.8723 756.5505 783.7379 897.4799 20
> df_ss() 419.7841 436.9871 448.1717 461.7023 523.2798 20
> df_u() 3971.1699 4044.3663 4097.9848 4168.3468 4245.8346 20
> df_rn() 646.1497 687.3472 711.3924 724.6235 754.3166 20