时间序列:Group_by,Summarize和Top_n

时间:2019-11-24 06:36:49

标签: r dplyr time-series

我希望从时间序列数据中提取前n个最大值,例如对于Jan,显示前n个值;在2月份,显示前10个值,等等。

#Data set example

df <-  data.frame(
  variables = rep(c("height", "weight", "mass", "IQ", "EQ"), times = 12),
  month = rep(1:12, each = 5),
  values = rnorm(60, 3, 1)
)

head(df, 10)
     variables month   values
1     height     1 1.859971
2     weight     1 3.985432
3       mass     1 4.755852
4         IQ     1 1.507079
5         EQ     1 2.816110
6     height     2 2.394953
7     weight     2 3.256810
8       mass     2 3.776439
9         IQ     2 3.038668
10        EQ     2 3.540750

尝试每月提取前3个值,但出现此错误:

df %>% 
  group_by(month) %>% 
  summarise(top.three = top_n(3))

Error in UseMethod("tbl_vars") : 
  no applicable method for 'tbl_vars' applied to an object of class "c('double', 'numeric')"

有人可以建议吗?谢谢。

1 个答案:

答案 0 :(得分:1)

使用摘要时,它会在所有列上执行,并且必须以长度1结尾。

如何首先根据该列进行排序并排在前3位呢?

df %>% arrange(desc(values)) %>% group_by(month) %>% top_n(wt=values,3)

或者如果您想查看结果排序:

df %>% arrange(month,desc(values)) %>% group_by(month) %>% top_n(wt=values,3)

# A tibble: 36 x 3
# Groups:   month [12]
   variables month values
   <fct>     <int>  <dbl>
 1 height        1   5.42
 2 mass          1   3.21
 3 EQ            1   3.19
 4 EQ            2   4.66
 5 weight        2   4.40
 6 IQ            2   3.97
 7 IQ            3   4.73
 8 height        3   3.89
 9 mass          3   3.73
10 IQ            4   3.97