r - 将 dplyr 转换为 data.table

标签 r dplyr data.table dtplyr

所以我正在尝试翻译一些 dplyr 代码。我尝试从将 dplyr 转换为 data.table 的包中获取帮助,但它仍然不起作用。错误来自 dplyrrow_number..

我需要 dplyr 代码中的所有步骤(尽管它们在 mtcars 中没有意义)

library(dplyr)
library(dtplyr) # from https://github.com/tidyverse/dtplyr
library(data.table)

mtcars %>% 
  distinct(mpg, .keep_all = TRUE) %>% 
  group_by(am) %>% 
  arrange(mpg, .by_group = TRUE) %>% 
  mutate(row_num = LETTERS[row_number()]) %>% 
  ungroup() 

# using dtplyr
dt <- lazy_dt(mtcars)

dt %>% 
  distinct(mpg, .keep_all = TRUE) %>% 
  group_by(am) %>% 
  arrange(mpg, .by_group = TRUE) %>% 
  mutate(row_num = LETTERS[row_number()]) %>% 
  ungroup() %>% 
  show_query()
#> unique(`_DT1`, by = "mpg")[order(am, mpg)][, `:=`(row_num = c("A", 
#> "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", 
#> "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z")[row_number()]), 
#>     keyby = .(am)]

# I then use the query from dtplyr 
DT <- as.data.table(mtcars)
unique(DT, by = "mpg")[order(am, mpg)][, `:=`(row_num = c("A", 
                                                              "B", "C", "D", "E", "F", "G", 
                                                              "H", "I", "J", "K", "L", "M", 
                                                              "N", "O", "P", "Q", "R", "S", 
                                                              "T", "U", "V", "W", "X", "Y", 
                                                              "Z")[row_number()]), keyby = .(am)]

#> row_number() should only be called in a data context

reprex package于2019年7月14日创建(v0.3.0)

最佳答案

我可以推荐 rowid 函数吗?它在“底层”执行分组步骤,您可能会发现它看起来更干净:

unique(DT, by='mpg')[order(am, mpg), row_num := LETTERS[rowid(am)]]

如果你喜欢链接,你也可以得到[]中的所有内容:

DT[ , .SD[1L], by = mpg
   ][order(am, mpg), row_num := LETTERS[rowid(am)]]

关于r - 将 dplyr 转换为 data.table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57023442/

相关文章:

r - R-ggplot2-设置刻度线间隔

r - 将一个阿拉伯语句子分成单词会导致不同数量的单词具有不同的功能

r - 计数出现和未出现的出现

r - 在 mutate 中访问列表元素

r - 如何按组计算日期之间的时间差

Rmarkdown 不适用于 Win 10 机器 : openBinaryFile: does not exist (No such file or directory)

r - 使用 dplyr 有条件地将行插入数据帧

r - 在 data.frame 中的列中解包和合并列表

python - 为什么在 2012 年 python 中的 pandas 合并比 R 中的 data.table 合并更快?

r - 如何在data.table中选择一个值?