我试图找到一种方法来找到矩阵中列的最小值,取决于另一列中的值.假设我的矩阵看起来像这样:
A B
3 1.2
3 3.4
3 0.7
4 4.5
4 4.9
5 0.1
5 0.4
6 5
Run Code Online (Sandbox Code Playgroud)
我希望在A中找到共享相同数字的每列的"局部最大值".
所以,我想得到一个新的变量C,看起来像:
A B C
3 1.2 0.7
3 3.4 0.7
3 0.7 0.7
4 4.5 4.5
4 4.9 4.5
5 0.1 0.1
5 0.4 0.1
6 5 5
Run Code Online (Sandbox Code Playgroud)
可以看出,C中的值是B中条目的最小值,在A中共享相同的值.
for(i in 1:length(data)){
if (A[i]==A[i+1])
else C <- min(B[i])
}
Run Code Online (Sandbox Code Playgroud)
像这样的for循环可能会起到作用,但是计算密集且昂贵.我想知道在创建具有最小值的列时是否有更简单的方法可以做到这一点.谢谢!
有两种方法可以解决这个问题.最简单的是:
> data$C <- ave(data$B, data$A, FUN = min)
> d
A B C
1 3 1.2 0.7
2 3 3.4 0.7
3 3 0.7 0.7
4 4 4.5 4.5
5 4 4.9 4.5
6 5 0.1 0.1
7 5 0.4 0.1
8 6 5.0 5.0
Run Code Online (Sandbox Code Playgroud)
另一种是"分裂 - 应用 - 结合"策略.