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

标签 r datatable group-by grouping symbols

我想知道使用数据表,如何使用“特殊符号”的组合来获取第一行每个的数据集中相应的行号(在引用文献中)?

例如:

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)]]

非常感谢任何解释帮助。

最佳答案

一种方法是使用 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

关于R:通过对数据表进行分组,获取每组的第一行及其对应的行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45153818/

相关文章:

r - 在 R 中,如何对数据框中每一行的不同数量的元素取平均值?

r - 将第 r 行的值插入第 (r+1) 行,并将 1 插入到 data.table 中多列的第一行

r - 添加 NA 和计算结果为 NaN 的表达式会根据顺序返回不同的结果,是否违反了交换性?

c# - 没有得到数据表对象的计数

jsf - 如何使数据表标题跨越多个列

sql - MySQL 更新 - MAX() GROUP BY

mysql - 如何使用 Group by 子句更新具有特定计数的多行?

r - 如何从R中的selectInput函数一次选择所有输入

html - 标题内带有 url 图片的表格

mysql - 优化 mysql 查询以选择值