所以我正在尝试翻译一些 dplyr 代码。我尝试从将 dplyr 转换为 data.table 的包中获取帮助,但它仍然不起作用。错误来自 dplyr
的 row_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/