最多汇总一帧数据帧

时间:2020-01-09 02:38:33

标签: r max

如果这是一个愚蠢的问题,我事先表示歉意。非常感谢您的帮助。

我有一个具有多个站点和采样年的数据集,并为一年中的每一天评分。例如,SiteA有40年的数据,每天都有一个值,采样年定义为Sampling.Year。让我们感到困惑的采样年是7月至6月,因此采用2016-2017年的形式。总共有8个变量,并且有很多NA。例如:

SiteName Sampling.Year   End.Date    H1_roll  T1_roll ... ... 
A        2015-2016                   1        NA   
A        2015-2016                   5        NA 
A        2015-2016                   2        NA 
A        2016-2017                   3        5 
A        2016-2017                   12       14
A        2016-2017                   6        7
B        2015-2016                   9        etc
B        2015-2016                   2 
B        2015-2016                   1 
B        2016-2017                   4 
B        2016-2017                   1 
B        2016-2017                   7

我需要对此数据集做一些事情。首先,我需要添加一列“ Start.Date”,即End.Date-182天。然后,我需要忽略(或告诉R忽略)列T1_roll中所有带有NA的行。

下一步是为每个站点和采样年选择最高的T1_roll分数,但是我需要确保其余信息仍保留在该选择中。即从上面的示例中,站点A在2016-17年的最大T1_roll为14,新数据框将包含该行中的所有变量:

 SiteName Sampling.Year  Start.Date End.Date    H1_roll  T1_roll ... ...
 A        2016-2017                             12       14

我在这里保存了一个示例数据集:Rolling Score Example

谢谢

1 个答案:

答案 0 :(得分:1)

我们可以按'SiteName'和slice将行与max的值为'T1_roll'分组

library(dplyr)
df1 %>%
   group_by(SiteName) %>%
   slice(which.max(T1_roll))

或与filter

df1 %>%
   group_by(SiteName) %>%
   filter(T1_roll == max(T1_roll, na.rm = TRUE))

base R中,可以使用ave

i1 <- with(df1, ave(T1_roll, SiteName, FUN = 
        function(x) max(x, na.rm = TRUE)) == T1_roll)
df1[i1, ]