可以在dplyr中汇总而不是删除我数据框中的其他列吗?

时间:2015-04-15 18:15:14

标签: r

我有一个包含三列的数据框,我正在尝试一个简单的摘要来查找数据框中每个城市的最高温度,同时保留每个最高温度的日期。

以下是数据框:

我们称之为maxT

  new.ID       Date   Max_TemperatureF
1     TUS 1960-04-05               87
2     TUS 1984-04-24               86
3     TUS 1972-04-01               75
4     TUS 2006-04-14               91
5     TUS 2000-05-03               96
6     PHX 1960-04-05               93
7     PHX 1984-04-24               93
8     PHX 1972-04-01               84
9     PHX 2006-04-14               91
10    PHX 2000-05-03               99
11    LAS 1960-04-05               91
12    LAS 1984-04-24               86
13    LAS 1972-04-01               81
14    LAS 2006-04-14               81
15    LAS 2000-05-03               98
16    LAX 1960-04-05               72
17    LAX 1984-04-24               69
18    LAX 1972-04-01               73
19    LAX 2006-04-14               63
20    LAX 2000-05-03               69
21    SAC 1960-04-05               82
22    SAC 1984-04-24               75
23    SAC 1972-04-01               64
24    SAC 2006-04-14               71
25    SAC 2000-05-03               81
26    PSP 1960-04-05               98
27    PSP 1984-04-24               91
28    PSP 1972-04-01               91
29    PSP 2006-04-14               81
30    PSP 2000-05-03               9

每个城市都列出了5个温度,我想找到每个城市的最大值,然后列出日期。我正在使用dplyr,并尝试了这个代码的相当多的变体,但Date总是在最终产品中被删除。有没有办法添加像drop = FALSE或类似的条件?

maxT <- tbl_df(maxT) %>%
  select(new.ID,Date,Max_TemperatureF)%>%
  group_by(new.ID) %>% 
  summarise(max_temp= max(Max_TemperatureF))

这是我一直得到的输出:

 new.ID max_temp
1    LAS       98
2    LAX       73
3    PHX       99
4    PSP       99
5    SAC       82
6    TUS       96

感谢。

2 个答案:

答案 0 :(得分:4)

我们可以尝试filterslice。如果存在最大“Max_TemperatureF”的关联并想要获取所有这些行,

 tbl_df(test) %>%
      group_by(new.ID) %>% 
      filter(Max_TemperatureF==max(Max_TemperatureF))

或者我们可以使用which.max获取行的索引,使用slice获取子集

 tbl_df(test) %>% 
       group_by(new.ID) %>% 
       slice(which.max(Max_TemperatureF))

答案 1 :(得分:3)

基础套餐

merge(aggregate(Max_TemperatureF ~ new.ID, df, max), df, all.x = T)

输出:

  new.ID Max_TemperatureF       Date
1    LAS               98 2000-05-03
2    LAX               73 1972-04-01
3    PHX               99 2000-05-03
4    PSP               98 1960-04-05
5    SAC               82 1960-04-05
6    TUS               96 2000-05-03

sqldf包

library(sqldf)
sqldf("SELECT [new.ID], Date, max(Max_TemperatureF)
      FROM df
      GROUP BY [new.ID]")

输出:

new.ID       Date max(Max_TemperatureF)
1    LAS 2000-05-03                    98
2    LAX 1972-04-01                    73
3    PHX 2000-05-03                    99
4    PSP 1960-04-05                    98
5    SAC 1960-04-05                    82
6    TUS 2000-05-03                    96