Как явно назвать столбец count, сгенерированный функцией .N? - PullRequest
0 голосов
/ 31 августа 2018

Я хочу сгруппировать таблицу данных по столбцу идентификаторов, а затем посчитать, сколько раз встречается каждый идентификатор. Это можно сделать следующим образом:

dt <- data.table(id =  c(1, 1, 2))
dt_by_id <- dt[, .N, by = id] 

dt_by_id
   id N
1:  1 2
2:  2 1

Это довольно хорошо, но я хочу, чтобы столбец N имел другое имя (например, count). В справке написано:

.N - целое число длины 1, содержащее количество строк в группе. Это может быть полезно, когда имена столбцов неизвестны в заранее и для удобства вообще. При группировании по i .N является количество строк в x соответствует каждой строке i, независимо от является ли значение nomatch NA или 0. В результате оно переименовывается в N (без точки). (в противном случае столбец с именем «.N» может конфликтовать с переменной .N, смотрите FAQ 4.6 для более подробной информации и примера), если это явно по имени; ....

Как "явно назвать" N-столбец при создании таблицы данных dt_by_id? (Я знаю, как потом переименовать его.) Я попытался

dt_by_id <- dt[, count = .N, by = id]

но это привело к

Error in `[.data.table`(dt, , count = .N, by = id) : 
  unused argument (count = .N)

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Вы должны перечислить результаты своих расчетов, если хотите дать свое собственное имя:

dt[, .(count=.N), by = id]

Это идентично dt[, list(count=.N), by = id], если вы предпочитаете; . здесь псевдоним list.

0 голосов
/ 31 августа 2018

Если мы уже назвали его, используйте setnames

setnames(dt_by_id, "N", 'count')

или используя rename

library(dplyr)
dt_by_id %>%
   rename(count = N)
#  id count
#1:  1     2
#2:  2     1
...