简体   繁体   English

是否有基于 R 的代码来计算 R 中组的中位数

[英]Is there R-based codes to calculate median for groups in R

Here is a sample of my data:这是我的数据示例:

 dat<-read.table (text=" W1D1 W1D2 W1D3 MN1 MN2 MN3 11 13 12 AAB 11 14 17 BBB 12 17 10 C C B 10 10 19 C C B 19 12 18 D C B 19 18 10 AD C 18 10 17 BDD 16 16 18 C DD 19 17 20 C DA 16 14 17 DDA ", header=TRUE)

W1D1 corresponds to MN1, W1D2 corresponds to MN2 and W1D3 corresponds to MN3. W1D1对应MN1,W1D2对应MN2,W1D3对应MN3。 I want to calculate the Median for the values of C and D. For example, MN1, has the values of 12,10,19,16,19,16 in W1D1.我想计算 C 和 D 的值的中位数。例如,MN1 在 W1D1 中的值为 12、10、19、16、19、16。 So I get a median of 16. So W1D1 goes to MN1, W1D2 goes to MN2 and W1D3 goes to MN3.所以我得到的中位数是 16。所以 W1D1 到 MN1,W1D2 到 MN2,W1D3 到 MN3。
The outcome is:结果是:

 Median1 16 Median2 15 Median3 17
Is it possible to do it using R-based, if not what is the simplest option? 是否可以使用基于 R 的方法来实现,如果不是最简单的选择是什么?

Considering I have 10 Medians but to simplify the matter I have provided 3 Medians考虑到我有 10 个中位数,但为了简化问题,我提供了 3 个中位数

I'm not sure I fully understood what you are looking for, but here is one attempt (although not very elegant).我不确定我是否完全理解您在寻找什么,但这是一种尝试(虽然不是很优雅)。

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))

-Result -结果

> df2

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

Here is an approach using pmap_dfc and then pivoting the result.这是一种使用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

Created on 2021-12-30 by the reprex package (v2.0.1)reprex package (v2.0.1) 于 2021 年 12 月 30 日创建

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM