【问题标题】:How to extract the top x% of rows by group and number in R? [duplicate]如何在R中按组和数字提取前x%的行? [复制]
【发布时间】:2020-07-26 17:20:53
【问题描述】:

假设我有这个数据集(不是我使用的原始数据)

data <- data.frame(
  name=c( rep("A",500), rep("B",500), rep("B",500), rep("C",20), rep('D', 100)  ),
  value=c( rnorm(500, 10, 5), rnorm(500, 13, 1), rnorm(500, 18, 1), rnorm(20, 25, 4), rnorm(100, 12, 1) )
)

我希望我的代码

  1. 名称
  2. 降序排列
  3. 并选择前 30%,但不是按我的 value 变量的值,而是每个 name 的行数

我的代码是这样开始的:

data <- data %>%
 arrange(name, value) %>%

我阅读了 top_frac() 但据我了解,它选择了前 x% 的值。

提前致谢!

【问题讨论】:

    标签: r group-by dplyr


    【解决方案1】:

    这里有一个解决方案。它按name 的组选择前 30% 的值,然后计算每个组中选择的行数。

    library(dplyr)
    
    data %>%
      group_by(name) %>%
      arrange(name, value) %>%
      top_frac(0.30) %>%
      count(name)
    #Selecting by value
    ## A tibble: 4 x 2
    ## Groups:   name [4]
    #  name      n
    #  <chr> <int>
    #1 A       150
    #2 B       300
    #3 C         6
    #4 D        30
    

    可以看出,这些数字实际上是name每组的30%与

    data %>% count(name) %>% mutate(n = n*0.3)
    #  name   n
    #1    A 150
    #2    B 300
    #3    C   6
    #4    D  30
    

    如果你想要前 30% 的值,而不考虑前值来自的组,那么上面的代码必须改成下面的代码。

    data %>%
      arrange(name, value) %>%
      top_frac(0.30) %>%
      count(name)
    #Selecting by value
    #  name   n
    #1    A  46
    #2    B 420
    #3    C  20
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-07
      • 1970-01-01
      • 1970-01-01
      • 2021-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多