我希望从时间序列数据中提取前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')"
有人可以建议吗?谢谢。
答案 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