Передать имя столбца и аргумент группы как переменные в data.table - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь посчитать количество пользователей для разных когорт. Я нашел способ сделать это с помощью 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, таким образом все правильно вычисляется, но имена в кавычках приводятся в кавычках, что неприятно и приводит к ошибкам. Я попробовал методы, предложенные здесь , а также ответ и комментарии этого ТАКОГО вопроса . Но ни один из них, похоже, тоже не работает. Что я делаю не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...