我想按两个列条目比较主题:“值”和“长度”。将该主题与数据框中的所有其他主题进行比较;他们将为“长度”列中值较高的每个主题获得-1。如果“长度”列中的条目的值较高,则它们将获得+1。如果它们的值等于“长度”(Length)列中另一个主题的值,则将比较“值”(Value)列中的值(如果条目更大,则为+1;如果值相等,则为0;如果值等于-1,则为-1。减)。新列“ Value2”中的条目将是来自比较的+1、0或-1值的总和。
我已经在R底下写了一些东西,但是似乎没有用。
Value Length
Subject1 2 0
Subject2 0 1
Subject3 5 1
Subject4 4 5
Subject5 4 5
Subject6 7 6
Subject7 9 8
for(i in 1:length(x)){
for(j in 1:length(x)){
if(i != j){
w = z[c(-i), ]
if(w$length[i] < w$length[j]){ value2[i] = value2[i] -1 }
if(w$length[i] > w$length[j]){ value2[i] = value2[i} + 1 }
if(w$length[i] == w$length[j]){
if(w$value[i] < w$value[j]){ value2[i] = value2[i] - 1 }
if(w$value[i] > w$value[j]){ value2[i] = value2[i] + 1 }
if(w$value[i] == w$value[j]){ value2[i] = value2[i] }
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
预期产量:
Value Length Value2
Subject1 2 0 -6
Subject2 0 1 -4
Subject3 5 1 -2
Subject4 4 5 +1
Subject5 4 5 +1
Subject6 7 6 +4
Subject7 9 8 +6
Run Code Online (Sandbox Code Playgroud)
基本上,您想使用rank及其打破平局,但输入两个而不是一个向量。最简单的解决方案是合并这两个向量。例如,如果只有整数,则可以执行以下操作:
res <- DF$Length + DF$Value/(max(DF$Value) + 1)
#[1] 0.2 1.0 1.5 5.4 5.4 6.7 8.9
res <- rank(res)
#[1] 1.0 2.0 3.0 4.5 4.5 6.0 7.0
res <- c(scale(res * 2, scale = FALSE)) #transformation of ranks
#[1] -6 -4 -2 1 1 4 6
Run Code Online (Sandbox Code Playgroud)