使用mutate和min_rank基于其他两列中的值创建排名列

使用mutate和min_rank基于其他两列中的值创建排名列,r,dplyr,mutate,R,Dplyr,Mutate,我试图重温一些旧代码,其中我使用for循环计算基于两列的基因组合排名。我的最终目标是列出一个列,其中列出了数据集中任何给定基因的表现都优于的基因比例 我有一个data.frame,我称之为scores,它包含两列与我的基因相关的分数。为了计算综合排名,我使用以下for循环,并通过将结果排名除以观察总数来计算比例分数 scores <- data.frame(x = c(0.128, 0.279, 0.501, 0.755, 0.613), y = c(1.49, 1.43, 0.744,

我试图重温一些旧代码,其中我使用for循环计算基于两列的基因组合排名。我的最终目标是列出一个列,其中列出了数据集中任何给定基因的表现都优于的基因比例

我有一个data.frame,我称之为scores,它包含两列与我的基因相关的分数。为了计算综合排名,我使用以下for循环,并通过将结果排名除以观察总数来计算比例分数

scores <- data.frame(x = c(0.128, 0.279, 0.501, 0.755, 0.613), y = c(1.49, 1.43, 0.744, 0.647, 0.380))

#Calculate ranking
comb.score = matrix(0, nrow = nrow(scores), ncol = 1)
for(i in 1:nrow(scores)){
  comb.score[i] = length(which(scores[ , 1] < scores[i, 1] & scores[ , 2] < scores[i, 2]))
}

comb.score <- comb.score/length(comb.score) #Calculate proportion 
现在我已经对tidyverse更加熟悉和熟悉了,我想将这段代码转换为使用tidyverse函数,但我自己也无法理解,也无法使用SO或RStudio社区答案


我的想法是使用mutate和minu-rank,但我不完全确定语法。此外,min_rank的行为似乎使用逻辑测试来评估排名,如分数[,1]有趣的问题。我建议这样做:

分数%>% 行%>% mutatecomb_得分=sumx>$x&y>$y%>% 解组%>% mutatecomb_分数=comb_分数/n 给

一个tibble:5x3 x y comb_分数 1 0.128 1.49 0 2 0.279 1.43 0 3 0.501 0.744 0 4 0.755 0.647 0.2 5 0.613 0.38 0
有趣的问题。我建议这样做:

分数%>% 行%>% mutatecomb_得分=sumx>$x&y>$y%>% 解组%>% mutatecomb_分数=comb_分数/n 给

一个tibble:5x3 x y comb_分数 1 0.128 1.49 0 2 0.279 1.43 0 3 0.501 0.744 0 4 0.755 0.647 0.2 5 0.613 0.38 0
有点类似于Martins的答案,但使用pmap代替

图书馆管理员 分数% 变异 得分=pmaplitx,y,~sum..1>x&..2>y/n >x y分数 > 1 0.128 1.490 0 > 2 0.279 1.430 0 > 3 0.501 0.744 0 > 4 0.755 0.647 0.2 > 5 0.613 0.380 0
由v0.3.0于2018年6月20日创建,有点类似于Martins答案,但使用pmap代替

图书馆管理员 分数% 变异 得分=pmaplitx,y,~sum..1>x&..2>y/n >x y分数 > 1 0.128 1.490 0 > 2 0.279 1.430 0 > 3 0.501 0.744 0 > 4 0.755 0.647 0.2 > 5 0.613 0.380 0 由v0.3.0于2020年6月18日创建,您的人员数据框架是什么样子的?您的预期输出是什么?people data.frame是一个输入错误。我已经更新了我的问题,使之更加具体,并陈述了我的预期输出。您的人员数据框架是什么样子的?您的预期输出是什么?people data.frame是一个输入错误。我已经更新了我的问题,使之更加具体,并陈述了我的预期结果。你能解释一下你答案中的.x和.y部分吗?@Mcmahoon89.$x只是写分数$x的另一种方式。行x>$x创建一个逻辑向量,将整列分数$x与当前值x进行比较。这基本上是分数[i,1]>分数[1]的矢量化版本。你能解释一下答案中的.x和.y部分吗?@Mcmahoon89.$x只是写分数$x的另一种方式。行x>$x创建一个逻辑向量,将整列分数$x与当前值x进行比较。它基本上是分数[i,1]>分数[1]的矢量化版本。