R:通过对数据表进行分组,获取每个组的第一行及其对应的行号

时间:2017-07-17 21:17:57

标签: r datatable group-by grouping symbols

我想知道如何使用datatable,如何使用"special-symbols"的组合来获取第一行相应的行号(在参考中)在每个group的数据集中?

例如:

Library(data.table)  
copy(mtcars) -> mt
setDT(mt) -> mt

获取cyl的每个组的第一行:

 mt[, .SD[1], by = cyl]

    cyl  mpg disp  hp drat   wt  qsec vs am gear carb
1:   6 21.0  160 110 3.90 2.62 16.46  0  1    4    4
2:   4 22.8  108  93 3.85 2.32 18.61  1  1    4    1
3:   8 18.7  360 175 3.15 3.44 17.02  0  0    3    2

根据cyl

获取与每个组对应的mt行号
mt[, .I[1], by = cyl]
   cyl V1
1:   6  1
2:   4  3
3:   8  5

预期输出:

    cyl  mpg disp  hp drat   wt  qsec vs am gear carb   row_N
1:   6 21.0  160 110 3.90 2.62 16.46  0  1    4    4    1
2:   4 22.8  108  93 3.85 2.32 18.61  1  1    4    1    3
3:   8 18.7  360 175 3.15 3.44 17.02  0  0    3    2    5

我尝试了以下但没有成功:

mt[, .SD[1], by= cyl][mt[, .I[1], by=cyl]]
mt[, .SD[1], by= cyl][mt[, `:=` (row_N = .I[1], by=cyl)]]

任何有关解释的帮助都非常感谢。

1 个答案:

答案 0 :(得分:2)

一种方法是将列与cbind组合在一起。

mt[, cbind(.SD[1], row_N=.I[1]), by = cyl]
   cyl  mpg disp  hp drat   wt  qsec vs am gear carb row_N
1:   6 21.0  160 110 3.90 2.62 16.46  0  1    4    4     1
2:   4 22.8  108  93 3.85 2.32 18.61  1  1    4    1     3
3:   8 18.7  360 175 3.15 3.44 17.02  0  0    3    2     5