R: индекс, соответствующий максимальному значению в каждой строке - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть матрица 744 x 3 (названная sharpe_a), которую я зацикливаю для создания кадра данных, состоящего из значения индекса, соответствующего максимальному значению для каждой строки (названного last_bestIndex_colnum)

Проблема в том, что онаобрабатывает два значения с идентичными абсолютными значениями, но противоположными знаками в качестве эквивалентов.

        sr_sig_fx sr_comm_i sr_comm_ii
[1,]        NA        NA         NA
[2,]        NA    0.2632    -0.5714
[3,]   -0.3684    0.3684    -0.2222
[4,]    0.3846   -0.3846    -0.5000

поэтому при использовании grep для определения столбца, содержащего максимальное значение для строки 3, например, я получаю следующее

> grep(max(x[3,]),x[3,])
[1] 1 2

, поэтому вместо простого возврата 2 оно думает-0,3684 и 0,3684 - это одно и то же значение, поэтому возвращаются 1 и 2. Однако я проверяю x [3,1]> x [3,2] и возвращает «FALSE», затем x [3,1]

structure(c(NA, NA, -0.3684, 0.3846, 0.7, 0.7, 0.7895, 0.9412, 
0.55, 0.25, NA, 0.2632, 0.3684, -0.3846, -0.7, -0.7, -0.7895, 
-0.9412, -0.55, -0.25, NA, -0.5714, -0.2222, -0.5, -0.7, -0.7, 
-0.7895, -1, -0.8235, -1), .Dim = c(10L, 3L), .Dimnames = list(
    NULL, c("sr_sig_fx", "sr_comm_i", "sr_comm_ii")))

1 Ответ

0 голосов
/ 28 февраля 2019

Когда вы используете подобный grep, он правильно определяет 0,3684 как максимум, а затем возвращает все столбцы, которые содержат 0,3684, независимо от отрицательного значения;grep предназначен для строк.Попробуйте:

which(x[1,] == max(x[1,][!is.na(x[1,]))

Редактировать: только что заметил в комментариях, что вы хотите вернуть NA, когда есть связь между двумя значениями.Это можно сделать так:

result <- which(x[1,] == max(x[1,][!is.na(x[1,]))
result <- ifelse(length(result) > 1, NA, result)
...