[英]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
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.