我有数据,我想在时间步骤上聚合,另外想要计算该组中另一个值的最大值。
为了聚合,我运行以下代码:
s_stats <- lapply(s_df_array, function(x) {
aggregate(x, by=list(unique.values=x$start), length)
})
s_df_array是一个数据帧表,代码可以很好地计算x $ start中每个值的条目出现次数。在这里你可以看到一些数据:列表中的第一个data.frame:
alb.station alb.start alb.km
alb 2 10
alb 2 67
alb 3 23
alb 3 74
alb 3 3
alb 3 15
alb 4 23
alb 4 52
列表中的第二个data.frame:
alt.station alt.start alt.km
alt 3 25
alt 3 45
alt 4 15
alt 4 10
列表中的第三个data.frame:与第一个和第二个相同的结构,但列名以“ber”开头。这继续在此列表中的44个data.frames
对于新列表中的每个data.frame,结果都应该是这样的:
alb.unique.values alb.station alb.max_km
2 2 67
3 4 74
4 2 52
alt.unique.values alt.station alt.max_km
3 2 45
4 2 15
所有44个data.frames等等
编辑:为列表添加了更多示例
我们可以做的
library(dplyr)
df1 %>%
group_by(alb.station, alb.start) %>%
summarise(station = n(), max.km = max(alb.km))
# A tibble: 3 x 4
# Groups: alb.station [?]
# alb.station alb.start station max.km
# <chr> <int> <int> <dbl>
#1 alb 2 2 67.0
#2 alb 3 4 74.0
#3 alb 4 2 52.0
有关data.frames的列表
map(lst, ~ .x %>%
group_by(alb.station, alb.start) %>%
summarise(station = n(), max.km = max(alb.km)))
如果我们有一个嵌套的list
元素,要么创建一个递归函数,要么使用if/else
map(lst, ~ if(is.data.frame(.x)) .x %>%
rename_all(funs(sub("^[^.]*\\.", "", .))) %>%
group_by(station, start) %>%
summarise(n = n(), max.km = max(km)) else map_df(.x, ~ .x %>%
rename_all(funs(sub("^[^.]*\\.", "", .))) %>%
group_by(station, start) %>%
summarise(n = n(), max.km = max(km))))
lst <- list(df1, df2, list(df1, df2))