Я не владею R data.table, и любая помощь будет принята с благодарностью для решения следующей проблемы!
У меня есть большой data.table (~ 1000000 строк) со столбцами числовых значений, и я хочу вывести один и тот же размерный data.table с отсортированной позицией индексов значений каждой строки.
краткий пример:
-Input:
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 ) <= 25 (<B> 2 ) <= 51 (<B> 3 ) <= 100 (<B> 4 * 1015) *),
Позиции отсортированных по строкам индексов для (1, 25, 100, 51) равны (1, 2, 4, 3) и вывод должен быть:
dt$PosA1 = c(1, ...
dt$PosA2 = c(2, ...
dt$PosA3 = c(4, ...
dt$PosA4 = c(3, ...
3-й ряд: 2 ( 1 ) <= 9 (<B> 2 ) <= 30 (<B> 3 ) <= 91 (<B> 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 здесь)
Небольшая помощь будет полезна для написания эффективного кода или другого подхода для решения проблемы!
С уважением.