2017-07-17 70 views
2

第一行和其對應的行號(在參考文獻中)爲每個group的數據集?R:在數據表分組,得到我想知道用<code>datatable</code>,我該如何使用的<code>"special-symbols"</code>組合得到<strong>第一排</strong>和<strong>其相應的行號</strong>每組

爲例如:

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 

得到在MT與基於cyl每個組的行號:

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

與解釋任何幫助,高度讚賞。

回答

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 
+1

或者'c'而不是'cbind',因爲'c(list(1),2)'返回一個將被轉換爲列的列表。 – thelatemail

相關問題