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)
有快速的方法吗?现在,我正在创建两个聚合数据框并将其链接。但这似乎效率不高
答案 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))