【问题标题】:Calculating median based on the group in long format基于长格式组计算中位数
【发布时间】:2019-12-05 16:54:53
【问题描述】:

我的数据格式很长

df1<-read.table(text=" ID   Temp    location
1   12  4
1   18  3
1   17  5
1   10  1
1   19  1
1   15  4
1   16  5
1   10  3
1   11  5
1   15  1
2   20  3
2   10  3
2   17  1
2   13  5
2   12  1
2   14  4
2   20  5
2   13  1
2   13  3
2   10  3
3   12  4
3   18  3
3   18  3
3   15  1
3   17  1
3   15  4
3   10  1
3   11  3
3   13  1
3   14  1",header=TRUE)

我想根据 Temp 和位置计算 3 组 (Id) 的中位数(向上取整)。问题是如果位置 = 1,id1、id2、id3 的中位数是多少。换句话说,10,19 和 15,中位数为 15,或者对于 id2,我们有 17,12 和 13,中位数为 13.5,roundup=14。等等。

所以我需要得到这些数据:

AM1 15
AM2 14
AM3 14

感谢您的帮助,很抱歉我无法表现出我的努力。

【问题讨论】:

    标签: r median


    【解决方案1】:

    您也可以使用 data.table。

    library(data.table)
    setDT(df1)[location == 1, .(Median = base::round(median(as.numeric(Temp)))), by = .(ID = paste0(“AM”, ID))]
    

    【讨论】:

    • 如果总是向上取整,则将“圆形”替换为“天花板”
    【解决方案2】:

    一种选择是先filter,然后通过median进行分组

    library(dplyr)
    library(stringr)
    df1 %>%
       filter(location ==1) %>%
       group_by(ID = str_c("AM", ID)) %>%
       summarise(Median = median(Temp))
    # A tibble: 3 x 2
    #  ID    Median
    #  <chr>  <int>
    #1 AM1       15
    #2 AM2       13
    #3 AM3       14
    

    另外,可以做得更紧凑,但效率低

    df1 %>%
       group_by(ID) %>%
       summarise(Median = median(Temp[location == 1]))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-15
      • 1970-01-01
      • 1970-01-01
      • 2020-05-08
      • 1970-01-01
      • 2022-01-13
      相关资源
      最近更新 更多