使用 data.table 进行嵌套分组中的前 n 个

rkr*_*aft 2 r top-n data.table

目标:按季度和名称分组我希望按计数获得前 n 个名称(请参见下面的示例)。因此,top 1 的所需输出(对于下面的示例)将是:

2019 Q1  Klaus 2
2019 Q2   Karl 3
Run Code Online (Sandbox Code Playgroud)

由于这只是一个简单的示例,因此我还希望获得按季度计数和名称排列的前 4、5 名等。您对如何实现这一点有什么好的想法吗data.table(不,dplyr请)。非常感谢!

library(data.table)

dt <- data.table(x = c("2019 Q1", "2019 Q1", "2019 Q1", "2019 Q2", "2019 Q2", "2019 Q2", "2019 Q2"),
                 y = c("Klaus", "Gustav", "Klaus", "Karl", "Karl", "Karl", "Stefan"))

# Structure of dt
# x      y
# 1: 2019 Q1  Klaus
# 2: 2019 Q1 Gustav
# 3: 2019 Q1  Klaus
# 4: 2019 Q2   Karl
# 5: 2019 Q2   Karl
# 6: 2019 Q2   Karl
# 7: 2019 Q2 Stefan


dt[, .N, by = .(x, y)]

# Output:
# x      y N
# 1: 2019 Q1  Klaus 2
# 2: 2019 Q1 Gustav 1
# 3: 2019 Q2   Karl 3
# 4: 2019 Q2 Stefan 1
Run Code Online (Sandbox Code Playgroud)

Gil*_*709 5

您可以首先计算每个名称和季度的 N,然后对 data.table 进行排序,然后选择每个季度的前 n 行:

dt[, .N, by = .(x, y)][order(-N), head(.SD, 1), by = x]
Run Code Online (Sandbox Code Playgroud)