【问题标题】:Mutate percentile rank based on two columns根据两列改变百分位排名
【发布时间】:2021-06-08 08:47:35
【问题描述】:

我之前问过以下问题:Mutate new column over a large list of tibbles 并且给出的解决方案非常完美。我现在对此有一个后续问题。

我现在有以下数据集:

df1:

name group competition metric value
A A comp A distance 10569
B A comp B distance 12939
C A comp C distance 11532
A A comp B psv-99 29.30
B A comp A psv-99 30.89
C A comp C psv-99 32.00

我现在想找出 df1 中所有值的百分位排名,但仅基于组和其中一项比赛 - 比赛 A。

【问题讨论】:

  • 嘿,彼得。我想我找到了答案的解决方案:statology.org/percentiles-in-r。但是,您应该事先在 competition 列中过滤您的数据集以仅查找“comp A”。

标签: r dplyr


【解决方案1】:

我们可以slice找到'comp A'的行%in%competition,然后按'group'列进行分组,并使用percent_rank创建一个新列percentile

library(dplyr)
df <- df %>%
   slice(which(competition %in% "comp A")) %>%
   group_by(group) %>%
   mutate(percentile = percent_rank(value))

【讨论】:

    【解决方案2】:

    也许只是在前面的代码中将metric 更改为competition?它会为您提供所有比赛的百分位排名,包括 A。

    df1 %>% 
      group_nest(group, competition) %>% 
      mutate(percentile = map(data, ~percent_rank(.$value))) %>% 
      unnest(c(data, percentile))
    

    【讨论】:

      【解决方案3】:

      你可以filtercompetitiongroup_bygroup

      library(dplyr)
      
      df %>%
        filter(competition == "comp A") %>%
        group_by(group) %>%
        mutate(percentile = percent_rank(value))
      

      【讨论】:

        猜你喜欢
        • 2013-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-15
        • 1970-01-01
        • 2019-11-19
        相关资源
        最近更新 更多