如何显式命名由.N函数生成的计数列?

3
我希望能够按照id列对数据表进行分组,然后计算每个id出现的次数。具体操作如下:
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分组时,对于i的每一行,.N是匹配到x的行数,无论nomatch是NA还是0。 在结果中将其重命名为N(没有点)(否则称为“.N”的列可能会与.N变量冲突,请参见FAQ 4.6以获取更多详细信息和示例),除非它明确地命名; ...。

如何在创建dt_by_id数据表时“明确命名”N列? (我知道如何在之后将其重命名。) 我尝试了
dt_by_id <- dt[, count = .N, by = id]

但这导致了
Error in `[.data.table`(dt, , count = .N, by = id) : 
  unused argument (count = .N)

2
如果你想要给出自己的名称,你必须列出计算的输出:dt[, .(count=.N), by = id]。如果你喜欢的话,这与dt[, list(count=.N), by = id]类似。 - AntoniosK
3个回答

5

如果您想给自己的名称,请列出计算的输出:

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

如果您喜欢,这与dt[, list(count=.N), by = id]相同;这里的.list的别名。


1
也许值得注意的是:对于.GRP和.I,同样可以使用列执行相同的操作。 - Frank

1
如果我们已经命名了它,那么使用 setnames
setnames(dt_by_id, "N", 'count')

或者使用rename
library(dplyr)
dt_by_id %>%
   rename(count = N)
#  id count
#1:  1     2
#2:  2     1

0

使用dplyr::count(x, name= "new column")会将默认的列名n替换为新的名称。

dt <- data.frame(id =  c(1, 1, 2))
dt %>%
   dplyr:: count(id, name = 'ID')

@GertArnold 对不起,我不熟悉评论,我在寻找同样的问题并最终来到这里,但答案不在这里,一直在搜索,当我找到答案时才想回复。下次评论时,我会确保提供足够的细节。 - Saneesh C S
问题是关于如何使用data.table而不是dplyr来完成此操作的。您正在回答一个关于不同计数操作的问题。 - camille

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接