2017-09-13 65 views
2

我有一個數據框每週包含多個條目。它看起來像這樣:計算分組數據幀中行的中位數

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單元在原始數據幀中已被省略。我通過plyr軟件包的ddply功能嘗試了不同的方法,但目前爲止無濟於事。

+0

您需要爲每一行應用中位數? – Smich7

回答

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 
+0

這工作,謝謝!我想獲得所有列的中位數(爲了清楚起見,更新了我的原始問題),因此我將所有變量(從t_30到t_30)都指定爲「保持」。如果你需要通過'allcols < - c(「t_10」,「t_15」,「t_18」,「t_20」,「t_25」,「t_30」)' –

+0

@ G.Perich調用所有列,對於所有列,只要執行'df1%>%group_by(星期)%>%summarise_all(中位數)',或者列是按照順序排列的,'df1%>%group_by(Week)%>%summarise_at(2:5 ,位數)' – akrun

+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 
+0

謝謝,但我一直在尋找保留數據幀 –

+0

@ G.Perich的原始格式,下次在你的問題中指定這個 – PoGibas

0

您還可以使用聚合函數:

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