我有一个包含每周多个条目的数据框。它看起来像这样:
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
函数尝试了不同的方法,但到目前为止无济于事。
答案 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)