首页 > 解决方案 > R中的元素比较

问题描述

我正在尝试编写一个 for 循环来比较两个人之间的值,但不是同一个人。以下数据框包含五个主题的值:

           Value1 
Subject1   0      
Subject2   1      
Subject3   5      
Subject4   6      
Subject5   8      

我编写了一个双循环,它根据以下条件创建一个“Value2”变量:

  1. 如果主题具有较大的 Value1,则结果为 +1。
  2. 如果主题具有相等的 Value1,则结果为 0。
  3. 如果主题的 Value1 较小,则结果为 -1。

例如,主题 1 的 Value1 小于其他四个主题;这应该导致-4。到目前为止,我编写的循环适用于第一个主题,但未能迭代到第二个主题。

Value2<-0
i = 0
w = 0

for(i in 1:length(Value1)){
    for(j in 1:length(Value1)){
        if(i != j){
            Value1[i] = w
            if(w > Value1[j]){
                Value2[i] = Value2[i] + 1
            }    
            if(w < Value1[j]){
                Value2[i] = Value2[i] - 1
            } 
            if(w == Value1[j]){
                Value2[i] = Value2[i] + 0
            }
        }
    }
}

标签: arraysrloops

解决方案


x = c(0, 1, 5, 6, 8)
r = rank(x)
ans = 2 * (r - mean(r))
ans
#[1] -4 -2  0  2  4

推荐阅读