计算分组数据框中行的中位数

时间:2017-09-13 09:53:48

标签: r dplyr

我有一个包含每周多个条目的数据框。它看起来像这样:

Week t_10 t_15 t_18 t_20 t_25 t_30
1 51.4 37.8 25.6 19.7 11.9  5.6
2 51.9 37.8 25.8 20.4 12.3  6.2
2 52.4 38.5 26.2 20.5 12.3  6.1
3 52.2 38.6 26.1 20.4 12.4  5.9
4 52.2 38.3 26.1 20.2 12.1  5.9
4 52.7 38.4 25.8 20.0 12.1  5.9
4 51.1 37.8 25.7 20.0 12.2  6.0
4 51.9 38.0 26.0 19.8 12.0  5.8

每周有不同数量的条目,它们的范围从一周的一个条目到一周的多个(最多4个)条目。 我想计算每周的中位数,并在新的数据帧中为所有不同的变量(t_10贯穿到t_30)输出它。原始数据帧中已经省略了NA单元格。我已经通过ddply包的plyr函数尝试了不同的方法,但到目前为止无济于事。

3 个答案:

答案 0 :(得分:2)

我们可以将summarise_at用于多列

library(dplyr)
colsToKeep <- c("t_10", "t_30")
df1 %>%
   group_by(Week) %>%
   summarise_at(vars(colsToKeep), median) 
# A tibble: 4 x 3
#   Week  t_10  t_30
#  <int> <dbl> <dbl>
#1     1 51.40  5.60
#2     2 52.15  6.15
#3     3 52.20  5.90
#4     4 52.05  5.90

答案 1 :(得分:1)

指定要保留在colsToKeep中的变量并将输入表存储在d

library(tidyverse)
colsToKeep <- c("t_10", "t_30")
gather(d, variable, value, -Week) %>%
    filter(variable %in% colsToKeep) %>%
    group_by(Week, variable) %>%
    summarise(median = median(value))

# A tibble: 8 x 3
# Groups:   Week [4]
   Week variable median
  <int>    <chr>  <dbl>
1     1     t_10  51.40
2     1     t_30   5.60
3     2     t_10  52.15
4     2     t_30   6.15
5     3     t_10  52.20
6     3     t_30   5.90
7     4     t_10  52.05
8     4     t_30   5.90

答案 2 :(得分:0)

您还可以使用聚合函数:

   newdf <- aggregate(data = df, Week ~ . , median)