我有一个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")))
当你使用这样的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)