R:与每行中的最大值对应的索引

问题描述 投票:0回答:1

我有一个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] <x [3,2]并且它返回“TRUE”所以我假设grep和max正在对x执行某些操作但我不确定是什么或为什么。

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")))
r loops max
1个回答
3
投票

当你使用这样的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)
© www.soinside.com 2019 - 2024. All rights reserved.