我有一个包含三列的数据框,我正在尝试一个简单的摘要来查找数据框中每个城市的最高温度,同时保留每个最高温度的日期。
以下是数据框:
我们称之为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
感谢。
答案 0 :(得分:4)
我们可以尝试filter
或slice
。如果存在最大“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