dplyr - 根据每组两个标准安排()

时间:2017-05-18 14:44:39

标签: r

我在采样活动前的五个星期内收集了数百个农场的每小时天气。我想确定采样事件前三周的平均Air_Temp。目前,我的数据无序。我希望按每个服务器场分组(在文件中表示),然后按日期和小时按升序排列所有数据。换句话说,我希望每个文件都按顺序排列。以下是我的数据示例(名为Weather的数据框):

              File Status Hour Air_Temp Dew_Temp Pressure Wind_Dir
1 results_1_farm-19      1   21     24.1     16.5       NA      190
2 results_1_farm-19      1   22     23.0     16.8       NA        0
3 results_1_farm-19      1   23     19.8     16.4       NA        0
4 results_1_farm-19      1    0     17.4     15.8       NA        0
5 results_1_farm-19      1    1     19.0     17.2       NA      170

Wind_Speed Sky Rain_1 Rain_6       Date
1        2.1   7     NA     NA 2013-01-14
2        0.0   4     NA     NA 2013-01-14
3        0.0   0     NA     NA 2013-01-14
4        0.0   0     NA     NA 2013-01-15
5        1.5   0     NA     NA 2013-01-15

它看起来像是按顺序排列,但是当你滚动浏览时,你会发现日期不正常。

所以,我正在尝试使用dplyr告诉R按日期和时间排列数据:

Weather1<-Weather%>%
group_by(File)%>%
arrange(Date, Hour)

然而,似乎安排忽略了group_by函数。在某些情况下,我有两个农场的数据具有相同的小时和日期。它没有按顺序放置每个农场,而是将df按日期和小时的顺序排列。

我是否误解了group_by会做什么?感谢您的任何帮助。

3 个答案:

答案 0 :(得分:1)

我正在使用dplyr的'0.5.0.9001'版本(预发布版本为0.6.0)。新版本即将发布。

对于分组df,arrange默认会忽略分组信息:

## S3 method for class 'grouped_df'
arrange(.data, ..., .by_group = FALSE)

因此,您必须手动设置.by_group = TRUE才能告诉arrange df已分组:

Weather1 <- Weather %>%
    group_by(File) %>%
    arrange(Date, Hour, .by_group = TRUE)

答案 1 :(得分:0)

group_by对此不是必需的,它通常用于您希望对数据执行某种聚合时。排列将首先按文件排序,然后按每个文件中的日期排序,然后按每个日期内的小时排序。这应该可以为您提供所需的结构。

Weather1 <- Weather%>%
            arrange(File, Date, Hour)

答案 2 :(得分:0)

除了我的评论,您还可以执行以下操作:

sorted <- Weather %>% 
          arrange(Date, Hour) %>%
          group_by(File)