我的部分脚本之前运行正常,但最近一直在产生一个奇怪的声明,之后我的许多其他功能都无法正常工作.我试图在每个站点的排名值列表中选择第8和第23个位置,以找到每个站点30年内每年每天的第25和第75百分位值.我的方法如下(适用于四行数据集 - slice(3)通常是切片(23),通常为我的整个30年数据集):
library(“dplyr”)
mydata
structure(list(station_number = structure(c(1L, 1L, 1L, 1L), .Label = "01AD002", class = "factor"),
year = 1981:1984, month = c(1L, 1L, 1L, 1L), day = c(1L,
1L, 1L, 1L), value = c(113, 8.329999924, 15.60000038, 149
)), .Names = c("station_number", "year", "month", "day", "value"), class = "data.frame", row.names = c(NA, -4L))
value <- mydata$value
qu25 <- mydata %>%
group_by(month, day, station_number) %>%
arrange(desc(value)) %>%
slice(3) %>%
select(value)
Run Code Online (Sandbox Code Playgroud)
在此之前,我将留下一个表,每个站点有一个值来描述第25个百分点(因为排列函数似乎从最高到最低排序).但是,现在当我运行这些行时,我收到一条消息:
Adding missing grouping variables: `month`, `day`, `station_number`
Run Code Online (Sandbox Code Playgroud)
这条消息对我来说没有意义,因为分组变量显然出现在我的表中.此外,直到最近,这种情况仍然正常.我试过了:
知道为什么我可能会收到这条消息,为什么它可能已经停止工作了?
谢谢你的帮助.
更新:添加了一个站点的dput示例,但是多年的1月1日的值.希望是一旦分组就返回位置值,例如,slice(3)有望返回该较小子集的15.6值.
Dre*_*rey 46
为了保持一致,分组变量应该在先前定义时始终存在,因此在select(value)执行时添加.ungroup应解决它:
qu25 <- mydata %>%
group_by(month, day, station_number) %>%
arrange(desc(value)) %>%
slice(2) %>%
ungroup() %>%
select(value)
Run Code Online (Sandbox Code Playgroud)
请求的结果没有警告:
> mydata %>%
+ group_by(month, day, station_number) %>%
+ arrange(desc(value)) %>%
+ slice(2) %>%
+ ungroup() %>%
+ select(value)
# A tibble: 1 x 1
value
<dbl>
1 113
Run Code Online (Sandbox Code Playgroud)
小智 6
您还可以在 select 语句之前使用 data.frame() 将 tibble 转换为数据框。然后 dplyr 就会失去对分组变量的跟踪,并且不再担心它们。
qu25 <- mydata %>%
group_by(month, day, station_number) %>%
arrange(desc(value)) %>%
slice(3) %>%
data.frame() %>%
select(value)
Run Code Online (Sandbox Code Playgroud)