【问题标题】:How to explicitly name the count column generated by the .N function?如何显式命名 .N 函数生成的计数列?
【发布时间】:2019-02-06 13:57:09
【问题描述】:

我想按 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 分组时,.N 是 x 中匹配的行数,对于 i 的每一行,无论 nomatch 是 NA 还是 0。在结果中重命名为 N(无点) (否则名为“.N”的列可能与 .N 变量冲突, 有关更多详细信息和示例,请参阅常见问题解答 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)

【问题讨论】:

  • 如果你想给出你自己的名字,你必须列出你的计算输出:dt[, .(count=.N), by = id] 。如果您愿意,这类似于dt[, list(count=.N), by = id]

标签: r group-by data.table


【解决方案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

【讨论】:

    【解决方案2】:

    如果你想给出自己的名字,你必须列出计算的输出:

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

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

    【讨论】:

    • 也许值得注意:对于 .GRP 和 .I 的列也可以这样做。
    猜你喜欢
    • 1970-01-01
    • 2020-12-01
    • 2011-10-28
    • 2019-03-01
    • 1970-01-01
    • 2022-07-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    相关资源
    最近更新 更多