Как усреднить несколько переменных в кадре данных, сгруппированных по дате, за определенные промежутки времени в другом кадре данных - PullRequest
0 голосов
/ 11 июня 2019

Я пытаюсь усреднить данные из нескольких столбцов в df на основе времени в другом df и сгруппировать по дате.df1 - это большой объект с> 50 000 строк, имеющий столбец datetime и несколько столбцов с данными, которые должны быть усреднены в разные периоды времени.У df2 есть столбец для даты (которая охватывает ~ 300 различных дат), с восходом, закатом, ночной средней точкой, часом после захода солнца и часом до восхода солнца.Так как в df2 есть 5 разных времен, мне нужны средние значения для каждого периода, делая 4 средних для каждой переменной в df1 для каждой даты.Я вставил несколько выводов dput ниже, чтобы имитировать типы данных, с которыми я работаю.Обратите внимание, что, поскольку оба кадра данных большие, это образцы каждого df и могут не содержать перекрывающихся дат.

Я начал с группировки по дате, но я не уверен, как действовать

df1<-structure(list(X = c(15255L, 370531L, 164052L, 385768L, 164660L, 320512L, 310332L, 207870L, 374209L, 384037L), datetime = structure(c(1382666832, 1491381288, 1428198714, 1496043810, 1428384762, 1476075474, 1472960394, 1441607022, 1492506756, 1495514124), class = c("POSIXct", "POSIXt" ), tzone = ""), mtr = c(476.100139098308, 40.3096980326816, 190.507994812417,
623.16297756071, 1316.10831568351, 130.05460789729, 426.391362627412, 794.871170055432, 664.854095538827, 87.0731714278365), vid = c(10.9712253212929, 0.348058462142944, 4.17660055086017,
14.7897213235497, 22.2240340709686, 2.94321962632239, 8.55752992630005, 13.4630692005157, 12.6897678971291, 3.3416459351778), vir = c(120.683479166031, 4.11496095843613, 45.9777652174234, 162.686932218075, 244.464374160767, 32.4128245811909, 94.1328294754028, 148.093760681152, 139.846099877357, 36.8101396411657 ), rtr = c(5237.10156184446, 443.406672837103, 2095.58784964886, 6854.79265188568, 14477.1914597946, 1430.60068747777, 4690.30499693279, 8743.58293390546, 7313.3949325189, 957.804907027068), mt = c(823746.117786614, 6359779.04662148, 1987510.62395236,
7445494.93388873, 2001143.65223585, 5856824.81619857, 5097032.76236516, 3010133.67082039, 6540792.26968181, 7415834.20122593), rt = c(9061207.29651591, 69957569.5237411, 21862616.8567079, 81900444.2763507, 22012580.1682171, 64425072.9831136, 56067360.3927196, 33111470.3731966, 71948714.979886, 81574176.2175404 ), ff = c(11.5323178782473, 32.1702791736536, 12.6389426556713, 11.5657282251475, 13.7768021406368, 12.2642003233716, 11.5373563882051, 15.652894576192, 14.1624290602428, 7.00239017068893), dd = c(203.263146323311, 149.347861521442, -3.54399807406384,
-28.6597226193563, 12.8977762014978, -0.544984261794743, -4.89316320474546, 7.7222011176437, -1.34222730712162, 67.3359470897316), u = c(-4.55474268125345, 16.401195526123, -0.781276245409457, -5.54700154345766, 3.07515145578288, -0.116652490502661, -0.984113817910801, 2.10328201280281, -0.331742766220023, 6.46166576572442 ), v = c(-10.5947475077281, -27.6753978729248, 12.6147722485071,
10.1487360422297, 13.4292114714994, 12.2636455333741, 11.4953082786785, 15.5109417311781, 14.1585431320976, 2.69821119162791), HGHT = c(992.029662282542, 500, 611.728202173514, 662.064284399711, 843.764907454437, 509.944907327361, 647.625056132299, 866.46899117831, 775.458469300207, 607.290800113246 )), row.names = c(6362L, 42544L, 15765L, 48247L, 16053L, 39092L, 35173L, 21715L, 44075L, 47609L), class = "data.frame") 

df2<-structure(list(datesrng = structure(c(1472774400, 1459555200, 1441411200, 1477699200, 1429315200, 1464393600, 1473984000, 1495411200, 1476576000, 1442620800, 1460505600, 1443657600, 1492473600, 1476144000, 1493424000, 1463443200, 1495065600, 1475971200, 1477008000, 1475020800 ), class = c("POSIXct", "POSIXt")), sunset = structure(c(1472779582.28331, 1459560084.71692,
1441416180.73423, 1477699549.16032, 1429320925.56847, 1464401565.71724, 1473987905.57994, 1495418859.64555, 1476577281.2456, 1442624499.15826, 1460511088.26679, 1443660209.87386, 1492479354.40687, 1476145684.24286, 1493430380.23994, 1463450608.72453, 1495073049.53729, 1475973050.91342, 1477008900.89576, 1475023610.39393), class = c("POSIXct", "POSIXt")), sunrise = structure(c(1472816306.06605, 1459597800.89681,
1441453219.73769, 1477744025.10275, 1429356479.26218, 1464432397.8339, 1474026605.65712, 1495450223.82396, 1476620114.86204, 1442663516.23589, 1460547236.70363, 1443700908.94178, 1492514836.83256, 1476187853.56606, 1493464375.78259, 1463482440.55869, 1495104803.65952, 1476014950.67547, 1477052382.59468, 1475063997.46213), class = c("POSIXct", "POSIXt" )), day_length = structure(c(10.2010507620043, 10.4767166355583,
10.2886120717393, 12.3544284515911, 9.87602602958679, 8.5644768512249, 10.7500214392609, 8.71227178063658, 11.8982267867857, 10.8380771195889, 10.0412324573596, 11.3052966438399, 9.85622935738829, 11.7137008876933, 9.44320629100005, 8.8421761557791, 8.82058950755331, 11.6388227927685, 12.0782496998045, 11.2186300555203), class = "difftime", units = "hours"), hoursunrise = structure(c(1472812706.06605, 1459594200.89681, 1441449619.73769,
1477740425.10275, 1429352879.26218, 1464428797.8339, 1474023005.65712, 1495446623.82396, 1476616514.86204, 1442659916.23589, 1460543636.70363, 1443697308.94178, 1492511236.83256, 1476184253.56606, 1493460775.78259, 1463478840.55869, 1495101203.65952, 1476011350.67547, 1477048782.59468, 1475060397.46213), class = c("POSIXct", "POSIXt")), hoursunset = structure(c(1472783182.28331, 1459563684.71692, 1441419780.73423,
1477703149.16032, 1429324525.56847, 1464405165.71724, 1473991505.57994, 1495422459.64555, 1476580881.2456, 1442628099.15826, 1460514688.26679, 1443663809.87386, 1492482954.40687, 1476149284.24286, 1493433980.23994, 1463454208.72453, 1495076649.53729, 1475976650.91342, 1477012500.89576, 1475027210.39393), class = c("POSIXct", "POSIXt")), midpoint = structure(c(1472797944.17468, 1459578942.80687, 1441434700.23596,
1477721787.13154, 1429338702.41532, 1464416981.77557, 1474007255.61853, 1495434541.73476, 1476598698.05382, 1442644007.69708, 1460529162.48521, 1443680559.40782, 1492497095.61971, 1476166768.90446, 1493447378.01127, 1463466524.64161, 1495088926.59841, 1475994000.79445, 1477030641.74522, 1475043803.92803), class = c("POSIXct", "POSIXt"))), row.names = c(182L, 122L, 64L, 239L, 18L, 177L, 196L, 292L, 226L, 78L, 132L, 90L, 258L, 221L, 269L, 166L, 288L, 219L, 231L, 208L), class = "data.frame")

Например, если бы я вычислял только средние значения для столбца mtr в df1, для вывода потребовались бы: столбец даты, столбец среднего значения за 1 час, столбец среднего значения за 1-ю половину, столбец среднего значения за 2-ю половинуи средняя колонка за последний час.Я не совсем уверен, с чего начать код для расчета этих средних.Любая помощь будет принята с благодарностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...