如何在条件中聚合

时间:2020-05-04 11:00:19

标签: r

x <- data.frame(names=c("peter","peter", "jacob", "jacob"),
            some_score =c(5,8,6,8),
            xDate = as.Date(c("2018-01-01", "2019-01-01" , "2018-06-08", 
"2019-10-22"))

在此数据框中需要汇总,这样我可以获得每个名称的最新分数 (彼得= 8,雅各= 8)

有快速的方法吗?现在,我正在创建两个聚合数据框并将其链接。但这似乎效率不高

5 个答案:

答案 0 :(得分:3)

我们可以为每个xDate获得最大为names的行。

可以使用dplyr

library(dplyr)
x %>% group_by(names) %>% slice(which.max(xDate))

#  names  some_score  Date     
#   <chr>      <dbl> <date>    
#1 jacob          8 2019-10-22
#2 peter          8 2019-01-01

data.table

library(data.table)
setDT(x)[, .SD[which.max(xDate)], names]

答案 1 :(得分:2)

> aggregate(x,list(x$names),tail,1)
  Group.1 names some_score      xDate
1   jacob jacob          8 2019-10-22
2   peter peter          8 2019-01-01

假设您的数据框已排序,否则首先按时间对其进行排序。

答案 2 :(得分:1)

另一种解决方案:

Class Test2 is extended by: 
Test3, 

答案 3 :(得分:1)

R基地一号班轮:

library(magrittr)

x %>% 
  dplyr::group_by(names) %>% 
  dplyr::filter(xDate == max(xDate))

答案 4 :(得分:0)

dplyr软件包是您解决问题的绝佳选择。

x <- data.frame(names=c("peter","peter", "jacob", "jacob"),
                some_score =c(5,8,6,8),
                xDate = as.Date(c("2018-01-01", "2019-01-01" , "2018-06-08", 
                                  "2019-10-22")))
library(dplyr)
x %>% 
  group_by(names) %>% 
  summarise(max_some_score = max(some_score))