r - 在 R 中的列表元素之间进行聚合
问题描述
我有一个包含 35 个元素 ( PercChangeDiff
) 的列表,每个元素包含 3 个变量 ( WEEK
、INTpercent
和EXTpercent
),所有这些变量都包含 34 个值。WEEK
我的目标是找到元素的每个日期(从)的单个平均值,以便我最终得到整个列表的每个日期的单个INTpercent
和值(我想聚合所有元素)。 EXTpercent
INTpercent
EXTpercent
我尝试了下面的代码:
PercChangeAvg <- lapply(PercChangeDiff, function(x) {
aggregate(list(INTpercAvg = x[["INTpercent"]], EXTpercAvg = x[["EXTpercent"]]), by = as.list(x[["WEEK"]]), FUN = "mean", simplify = TRUE)
}
)
但我收到以下错误:
aggregate.data.frame(as.data.frame(x), ...) 中的错误:参数必须具有相同的长度
我检查了x
和by
参数的长度,它们都是 34。任何关于如何解决这个问题的想法都将不胜感激。
我的数据负责人如下:
> head(PercChangeDiff)
$`20014409-EA`
$`20014409-EA`$`WEEK`
[1] "2017-10-02" "2017-10-09" "2017-10-16" "2017-10-23" "2017-10-30" "2017-11-06" "2017-11-13" "2017-11-20"
[9] "2017-11-27" "2017-12-04" "2017-12-11" "2017-12-18" "2018-01-15" "2018-01-22" "2018-01-29" "2018-02-05"
[17] "2018-02-12" "2018-02-19" "2018-02-26" "2018-03-05" "2018-03-12" "2018-03-19" "2018-03-26" "2018-04-02"
[25] "2018-04-09" "2018-04-16" "2018-04-23" "2018-04-30" "2018-05-07" "2018-05-14" "2018-05-21" "2018-05-28"
[33] "2018-06-04" "2018-06-11"
$`20014409-EA`$INTpercent
[1] NA 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 -42.80936
[11] 0.00000 0.00000 29.97658 0.00000 0.00000 -42.80936 0.00000 0.00000 0.00000 29.97658
[21] 2.28833 0.00000 0.00000 0.00000 -2.34192 0.00000 0.00000 0.00000 0.00000 0.00000
[31] 0.00000 0.00000 0.00000 0.00000
$`20014409-EA`$EXTpercent
[1] NA 0.0000000 -0.5102041 0.5076142 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
[10] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
[19] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
[28] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
$`20015041-EA`
$`20015041-EA`$`WEEK`
[1] "2017-10-02" "2017-10-09" "2017-10-16" "2017-10-23" "2017-10-30" "2017-11-06" "2017-11-13" "2017-11-20"
[9] "2017-11-27" "2017-12-04" "2017-12-11" "2017-12-18" "2018-01-15" "2018-01-22" "2018-01-29" "2018-02-05"
[17] "2018-02-12" "2018-02-19" "2018-02-26" "2018-03-05" "2018-03-12" "2018-03-19" "2018-03-26" "2018-04-02"
[25] "2018-04-09" "2018-04-16" "2018-04-23" "2018-04-30" "2018-05-07" "2018-05-14" "2018-05-21" "2018-05-28"
[33] "2018-06-04" "2018-06-11"
$`20015041-EA`$INTpercent
[1] NA 30.4609218 0.0000000 0.0000000 -0.4024145 0.0000000 0.0000000 0.0000000
[9] 0.0000000 0.0000000 0.0000000 0.0000000 -24.2500000 0.0000000 0.0000000 0.0000000
[17] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 19.5171026
[25] 0.0000000 0.0000000 0.0000000 0.0000000 -24.2500000 0.0000000 0.0000000 0.0000000
[33] 19.5171026 0.0000000
$`20015041-EA`$EXTpercent
[1] NA 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 -0.4048583 0.4032258
[9] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
[17] 0.0000000 0.0000000 0.0000000 -42.9394813 0.0000000 0.0000000 30.0403226 0.0000000
[25] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
[33] 0.0000000 0.0000000
$`20016844-EA`
$`20016844-EA`$`WEEK`
[1] "2017-10-02" "2017-10-09" "2017-10-16" "2017-10-23" "2017-10-30" "2017-11-06" "2017-11-13" "2017-11-20"
[9] "2017-11-27" "2017-12-04" "2017-12-11" "2017-12-18" "2018-01-15" "2018-01-22" "2018-01-29" "2018-02-05"
[17] "2018-02-12" "2018-02-19" "2018-02-26" "2018-03-05" "2018-03-12" "2018-03-19" "2018-03-26" "2018-04-02"
[25] "2018-04-09" "2018-04-16" "2018-04-23" "2018-04-30" "2018-05-07" "2018-05-14" "2018-05-21" "2018-05-28"
[33] "2018-06-04" "2018-06-11"
$`20016844-EA`$INTpercent
[1] NA 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
[12] 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 4.784689 0.000000
[23] 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
[34] 0.000000
$`20016844-EA`$EXTpercent
[1] NA 0.0000000 -19.9195171 16.3299663 0.0000000 0.0000000 0.0000000 0.0000000
[9] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
[17] 0.0000000 -0.5076142 0.5050505 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
[25] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
[33] 0.0000000 0.0000000
数据
l <- list(`20014409-EA` = list(WEEK = structure(c(NA, 17448, 17455, 17462, 17469, 17476, 17483, 17490, 17497, 17504, 17511, 17518, 17546, 17553, 17560, 17567, 17574, 17581, 17588, 17595, 17602, 17609, 17616, 17623, 17630, 17637, 17644, 17651, 17658, 17665, 17672, 17679, 17686, 17693), class = "Date"), INTpercent = c(NA, 0, 0, 0, 0, 0, 0, 0, 0, -42.809364548495, 0, 0, 29.9765807962529, 0, 0, -42.809364548495, 0, 0, 0, 29.9765807962529, 2.28832951945081, 0, 0, 0, 2.34192037470727, 0, 0, 0, 0, 0, 0, 0, 0, 0), EXTpercent = c(NA, 0, -0.510204081632654, 0.50761421319797, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)), `20015041-EA` = list(WEEK = structure(c(NA, 17448, 17455, 17462, 17469, 17476, 17483, 17490, 17497, 17504, 17511, 17518, 17546, 17553, 17560, 17567, 17574, 17581, 17588, 17595, 17602, 17609, 17616, 17623, 17630, 17637, 17644, 17651, 17658, 17665, 17672, 17679, 17686, 17693), class = "Date"), INTpercent = c(NA, 30.4609218436874, 0, 0, -0.402414486921538, 0, 0, 0, 0, 0, 0, 0, -24.25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19.5171026156942, 0, 0, 0, 0, -24.25, 0, 0, 0, 19.5171026156942, 0), EXTpercent = c(NA, 0, 0, 0, 0, 0, -0.404858299595133, 0.403225806451604, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -42.9394812680115, 0, 0, 30.0403225806452, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)), `20016844-EA` = list(WEEK = structure(c(NA, 17448, 17455, 17462, 17469, 17476, 17483, 17490, 17497, 17504, 17511, 17518, 17546, 17553, 17560, 17567, 17574, 17581, 17588, 17595, 17602, 17609, 17616, 17623, 17630, 17637, 17644, 17651, 17658, 17665, 17672, 17679, 17686, 17693), class = "Date"), INTpercent = c(NA, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.78468899521531,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), EXTpercent = c(NA, 0, -19.9195171026157, 16.3299663299663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.507614213197974, 0.505050505050509, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)), `20044140-EA` = list(WEEK = structure(c(NA, 17448, 17455, 17462, 17469, 17476, 17483, 17490, 17497, 17504, 17511, 17518, 17546, 17553, 17560, 17567, 17574, 17581, 17588,
17595, 17602, 17609, 17616, 17623, 17630, 17637, 17644, 17651, 17658, 17665, 17672, 17679, 17686, 17693), class = "Date"), INTpercent = c(NA, 0, 0, 0, 0, 0, 0, 0, 0, -59.5317725752508, 0, 0, -59.0425531914894, 0, 60.5870020964361, 0, 0, 0, 0, 0, 2.05338809034909, 0, -151.030927835052, 60.1642710472279, 0, 0, 0, 0, -143.5, 0, 58.9322381930185, -63.973063973064, 0, 0), EXTpercent = c(NA, 0, -17.632241813602, 14.9892933618844, 0, 0, -137.055837563452, 0, 57.8158458244111, -137.055837563452, 57.8158458244111, 0, 0, 0, 0, 0, 0, -91.3934426229508, 0, 47.7516059957173, 0, 0, -89.0688259109312, 0, 47.1092077087794, 0, 0, 0, 0, -153.804347826087, 60.5995717344754, 0, 0, 0)), `20067427-EA` = list(WEEK = structure(c(NA, 17448, 17455, 17462, 17469, 17476, 17483, 17490, 17497, 17504, 17511, 17518, 17546, 17553, 17560, 17567, 17574, 17581, 17588, 17595, 17602, 17609, 17616, 17623, 17630, 17637, 17644, 17651, 17658, 17665, 17672, 17679, 17686, 17693), class = "Date"), INTpercent = c(NA, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34.3544857768053, 0, 0, 0, 2.14132762312633, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -23.8726790450928, 19.271948608137, -57.2390572390572), EXTpercent = c(NA, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -87.7049180327869, 17.8451178451179, 0, -21.7213114754098, 0, 46.4912280701754, 0, 0, 0, -58.3333333333333, 0, 0, 0, 0, 0, 0, 4)), `20071339-EA` = list(WEEK = structure(c(NA, 17448, 17455, 17462, 17469, 17476, 17483, 17490, 17497, 17504, 17511, 17518, 17546, 17553, 17560, 17567, 17574, 17581, 17588, 17595, 17602, 17609, 17616, 17623, 17630, 17637, 17644, 17651, 17658, 17665, 17672, 17679, 17686, 17693), class = "Date"), INTpercent = c(NA, 0, 25.5639097744361, 0, 0, 0, 0, -61.5384615384615, 0, 0, 0, 0, 0, 38.0952380952381, -34.3434343434343, 0, -3.48432055749129, 0, 28.0701754385965, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99.5, 49.874686716792, -34.3434343434343, 25.5639097744361, 0), EXTpercent = c(NA, 10.1010101010101, 0, 25.3768844221105, 0, -40.1408450704225, 0, 0, 0, 0, 28.643216080402, 0, -61.1336032388664, 14.2361111111111, -16.5991902834008, 14.2361111111111, 0, 0, 27.6381909547739, -34.006734006734, -11.2359550561798, 32.9145728643216, 0, -38.1944444444444, 0, 27.6381909547739, 0, 0, 0, 0, 0, -38.1944444444444, 0, 0)))
解决方案
使用tidyverse
:
library(tidyverse)
map(l,as_tibble) %>%
bind_rows %>%
group_by(WEEK) %>%
summarize_all(mean)
# # A tibble: 34 x 3
# WEEK INTpercent EXTpercent
# <date> <dbl> <dbl>
# 1 2017-10-09 5.07682031 1.6835017
# 2 2017-10-16 4.26065163 -6.3436605
# 3 2017-10-23 0.00000000 9.5339597
# 4 2017-10-30 -0.06706908 0.0000000
# 5 2017-11-06 0.00000000 -6.6901408
# 6 2017-11-13 0.00000000 -22.9101160
# 7 2017-11-20 -10.25641026 0.0672043
# 8 2017-11-27 0.00000000 9.6359743
# 9 2017-12-04 -17.05685619 -22.8426396
# 10 2017-12-11 0.00000000 14.4098437
# # ... with 24 more rows
以 R 为基础的翻译:
aggregate(cbind(INTpercent, EXTpercent) ~ WEEK,
do.call(rbind, lapply(l,as.data.frame)),
mean)
推荐阅读
- javascript - 离子输入文本框应该可见,直到选中运输复选框
- javascript - 为什么 Moment.js 在给定时区的第二天返回?
- javascript - 在角度 9 的 elemntRef 中找不到 Div 的内部文本
- android - android片段没有填满整个屏幕
- apostrophe-cms - 我可以更改 apos-area 及其小部件的包装器元素吗?
- android - 我想使用Android App从firebase中单独获取所有数据
- android - “android:windowLightStatusBar”不起作用
- vue.js - 在 Quasar/Vue 中触发/更新从子组件到父组件的数据更改,以防子组件具有项目列表
- java - 禁用 Spring Cloud 配置客户端
- javascript - 如何使用 Vue CLI 一次将多个 Vue.js 组件构建为原生 Web 组件?