【发布时间】:2019-08-18 13:00:58
【问题描述】:
我对 R data.table 不流利,如果能帮助解决以下问题,我们将不胜感激! 我有带有数值列的大 data.table(~1000000 行),我想输出一个相同维度的 data.table,其中包含每行值的排序索引位置。
一个简短的例子:
-输入:
dt = data.frame(ack = 1:7)
dt$A1 = c( 1, 6, 9, 10, 3, 5, NA)
dt$A2 = c( 25, 12, 30, 10, 50, 1, 30)
dt$A3 = c( 100, 63, 91, 110, 1, 4, 10)
dt$A4 = c( 51, 65, 2, 1, 0, 200, 1)
第一行:1 (1) 2) 3) 4), (1, 25, 100, 51) 的行排序索引位置为 (1, 2, 4, 3),输出应为:
dt$PosA1 = c(1, ...
dt$PosA2 = c(2, ...
dt$PosA3 = c(4, ...
dt$PosA4 = c(3, ...
第三行:2 (1) 2) 3) 4) ,必须输出:
dt$PosA1 = c( 1,1,2,...)
dt$PosA2 = c( 2,2,3,...)
dt$PosA3 = c( 4,3,4,...)
dt$PosA4 = c( 3,4,1,...)
输出是输入数据的同一维度。表中按行填充排序索引的值。
dt$PosA1 = c( 1, 1, 2, 2, 3, 1, NA)
dt$PosA2 = c( 2, 2, 3, 3, 4, 2, 3)
dt$PosA3 = c( 4, 3, 4, 4, 2, 2, 2)
dt$PosA4 = c( 3, 4, 1, 1, 1, 4, 1)
我想也许是这样的?
library(data.table)
setDT(dt)
# pseudocode
dt[, PosA1 := rowPosition(.SD, 1, na.rm=T),
PosA2 := rowPosition(.SD, 2, na.rm=T),
PosA3 := rowPosition(.SD, 3, na.rm=T),
PosA4 := rowPosition(.SD, 4, na.rm=T),
.SDcols=c(A1, A2, A3, A4)]
我不确定语法,我错过了 rowPosition 函数。是否有任何功能可以做到这一点? (我在这里将其命名为 rowPosition)
编写一个高效的代码或解决问题的另一种方法会很有帮助!
问候。
【问题讨论】:
标签: r function sorting data.table row