我有一个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
因此,它认为-0.3684和0.3684是相同的值,因此返回1和2,而不是仅返回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")))
答案 0 :(得分: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)