我有一个很大的列表,由多个数据帧组成,如下所示。
ls.DataFrame[[1]]
Date Velocity
10/1/1990 5.5
10/1/1990 5.5
10/1/1990 5.5
10/1/1990 5.2
10/1/1990 5.2
10/1/1990 5.2
10/2/1990 5.2
10/2/1990 5.2
10/2/1990 5.2
10/2/1990 5.2
10/2/1990 5
10/2/1990 5.2
10/2/1990 5.2
10/3/1990 4.2
10/3/1990 4.2
10/3/1990 4.2
10/3/1990 4.4
10/3/1990 4.2
10/3/1990 3.7
10/3/1990 3.7
我想要的输出是保留日期和该特定日期的最大速度。这就是我希望输出看起来像
Date Velocity
10/1/1990 5.5
10/2/1990 5.2
10/3/1990 4.4
我尝试这样做,但是无法正常工作
max(ls.Dataframe[[1]]Velocity[ls.dataframe[[1]]$Date]
答案 0 :(得分:2)
我们可以将list
与map
循环,按“日期”分组,并使用max
来获得“速度”的tidyverse
library(tidyverse)
map(ls.Dataframe, ~ .x %>%
group_by(Date) %>%
summarise(Velocity = max(Velocity))
或与data.table
一起使用,以更高效地进行操作
library(data.table)
lapply(ls.Dataframe, function(x)
as.data.table(x)[, .(Velocity = max(Velocity)), by = Date])
在base R
中,我们与lapply
循环并使用aggregate
,但这会很慢
lapply(ls.Dataframe, function(x) aggregate(Velocity ~ Date, x, FUN = max))