arrays - R中按列进行的复杂元素比较
问题描述
我想通过两列条目比较主题:值和长度。该主题将与数据框中的所有其他主题进行比较;对于“长度”列中具有较高值的每个主题,他们将获得 -1。如果他们在“长度”列中的条目具有更高的值,他们将获得 +1。如果它们的值等于“长度”列中另一个主题的值,则将比较它们在“值”列中的值(如果它们的条目更大,则为 +1;如果值相等,则为 0;如果它们的值大于,则为 -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] }
}
}
}
}
预期输出:
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
解决方案
基本上,您想使用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
推荐阅读
- r - 在R中有条件地选择多列
- prism - 使用 PRISM 发布事件未按预期工作
- javascript - TypeError:chargebee.subscription.list 不是函数
- r - 将值添加到数据集中不存在的图例
- algorithm - 找到最小权重的 Dijkstra 树
- javascript - 在过滤 onClick vs. Submit 中反应清除输入字段返回语句逻辑
- amazon-web-services - 您如何在 Amazon 中使用 ResponseCacheControl URL 参数?
- python - 用 Beautiful Soup 选择 div
- javascript - 防止在Vue.js中@click上的锚标记重新加载页面
- javascript - 如何将所有快速页面路由到唯一页面(没有 html 扩展名)