【问题标题】:Is there R-based codes to calculate median for groups in R是否有基于 R 的代码来计算 R 中组的中位数
【发布时间】:2021-12-30 13:55:33
【问题描述】:

这是我的数据示例:


dat<-read.table (text=" W1D1    W1D2    W1D3    MN1 MN2 MN3
11  13  12  A   A   B
11  14  17  B   B   B
12  17  10  C   C   B
10  10  19  C   C   B
19  12  18  D   C   B
19  18  10  A   D   C
18  10  17  B   D   D
16  16  18  C   D   D
19  17  20  C   D   A
16  14  17  D   D   A

", header=TRUE)

W1D1 对应 MN1,W1D2 对应 MN2,W1D3 对应 MN3。 我想计算 C 和 D 的值的中位数。例如,MN1 在 W1D1 中具有 12、10、19、16、19、16 的值。所以我得到的中位数是 16。所以 W1D1 进入 MN1,W1D2 进入 MN2,W1D3 进入 MN3。
结果是:

Median1 16
Median2 15
Median3 17

是否可以使用基于 R 的方法来实现,如果不是,那么最简单的选择是什么?

考虑到我有 10 个中位数,但为了简化问题,我提供了 3 个中位数

【问题讨论】:

标签: r


【解决方案1】:

我不确定我是否完全理解您在寻找什么,但这是一种尝试(虽然不是很优雅)。

df1 <- df  %>%
    pivot_longer(cols = starts_with("M")) %>%
    filter(value %in% c("C", "D")) %>%
    group_by(name) %>%
    summarise(across(starts_with("W1"), median)) %>%
    select(-name)
  
  
df2 <- tibble(median = df1 %>%
                  as.matrix() %>%
                  diag(),
                variable = names(df1))

-结果

> df2

# A tibble: 3 x 2
  median variable
   <dbl> <chr>   
1     16 W1D1    
2     15 W1D2    
3     17 W1D3   

【讨论】:

  • 谢谢您- 抱歉不能反映我的结果
  • 我想你要找的是这个矩阵的对角元素吧?
  • 不抱歉,我已经更新了我的问题
  • 现在怎么样?我编辑了答案
【解决方案2】:

这是一种使用pmap_dfc 然后旋转结果的方法。

library(tidyverse)

n <- ncol(dat) / 2

pmap_dfc(list(str_c("Median", 1:n), str_c('W1D', 1:n), str_c('MN', 1:n)),
     ~ filter(dat, .data[[..3]] %in% c('C', 'D')) %>% 
       summarise('{..1}' := median(.data[[..2]]))) %>%
  pivot_longer(everything())
#> # A tibble: 3 × 2
#>   name    value
#>   <chr>   <dbl>
#> 1 Median1    16
#> 2 Median2    15
#> 3 Median3    17

reprex package 创建于 2021-12-30 (v2.0.1)

【讨论】:

    猜你喜欢
    • 2019-11-21
    • 2022-06-25
    • 2013-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多