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

用户2662565

我有一个 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")))
djfinnoy

当您像这样使用 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)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章