我正在尝试计算不同群组的用户数。我找到了一种使用dplyr进行操作的方法,但我想使用data.table实现解决方案,从而提高效率并作为练习。
我在此示例中使用的库:
library(dplyr)
library(magrittr)
library(data.table)
假设我有这个df:
df <- data.frame(V1 = sample(c("a", "b", "c"), 11, TRUE),
V2 = sample(c("2016", "2017", "2018"), 11, TRUE),
V3 = sample(seq(1:3), 11, TRUE),
V4 = sample(seq(1:3), 11, TRUE),
Id = sample(seq(1:5), 11, TRUE))
使用dplyr
的解决方案是:
for (grp in c("V1", "V2", "V3", "V4")) {
col <- paste0(grp, "_user_cnt")
df %<>%
group_by_(grp) %>%
mutate(!!col := n_distinct(Id)) %>%
ungroup()
}
我对data.table的处理方式如下:
DT <- data.table(df)
for (grp in c("V1", "V2", "V3", "V4")) {
col <- paste0(grp, "_user_cnt")
DT[, (deparse(col)) := n_distinct(Id), by = get(grp)]
}
问题是我找不到正确传递col
和grp
的方法,这种方法可以正确计算所有内容,但使用引号括起来,这很讨厌并导致错误。我已经尝试过here建议的技术,以及this SO question的答案和评论。但是它们似乎都不起作用。我在做什么错了?