Объединить данные с ближайшей датой в R, используя tidyverse - PullRequest
0 голосов
/ 15 октября 2019

У меня есть данные, которые имеют измерения, которые находятся на расстоянии 3 минуты. Я хочу сделать дальнейшие расчеты, и разница в 3 минуты не имеет значения на самом деле.

df <- tibble(structure(list(Abs_Druck_mbar = c(NA, 789.4, NA, 789.8, NA, 789.3, 
NA, 787.3, NA, 787.6, NA, 785.3, NA, 786, NA, 784.5, NA, 783.1, 
NA, 783.2, NA, 782.6, NA, 782.7, NA, 781.6, NA, 781.7, NA, 780.3, 
NA, 780.8, NA, 780, NA, 779.8, NA, 781.3, NA, 782.8, NA, 785.9, 
NA, 790.1, NA, 794.1, NA, 798.3, NA, 803, NA, 804.3, NA, 804.6, 
NA, 808.3, NA, 810.4, NA, 809.8, NA, 805.9, NA, 805.3, NA, 803.5, 
NA, 799.6, NA, 800.2, NA, 800.2, NA, 799.6, NA, 799.4, NA, 798.5, 
NA, 797.6, NA, 795.2, NA, 796.2, NA, 794.4, NA, 794.2, NA, 793.2, 
NA, 791.1, NA, 788, NA, 790.6, NA, 788.2, NA, 788.7, NA, 786.7, 
NA, 787.8, NA, 786.1, NA, 785.6, NA, 785.1, NA, 783.6, NA, 783.6, 
NA, 782, NA, 781.7, NA, 781.5, NA, 782.3, NA, 780.9, NA, 779.7, 
NA, 779.9, NA, 780.3, NA, 781.3, NA, 781.8, NA, 783.1, NA, 785.6, 
NA, 790.6, NA, 796.1, NA, 800.3, NA, 798.6, NA, 805.8, NA, 808, 
NA, 809.6, NA, 809.3, NA, 809.8, NA, 806.2, NA, 805.5, NA, 803.7, 
NA, 802.2, NA, 802.7, NA, 799.6, NA, 799.8, NA, 799.1, NA, 799.3, 
NA, 796.7, NA, 795.2, NA, 798.5, NA, 815, NA, 829.3, NA, 820.8, 
NA, 811.2, NA, 806.5, NA, 799.8, NA, 797.6, NA, 793.8, NA, 793.2, 
NA, 791.6, NA, 790.8, NA, 790.1, NA, 789.3, NA, 789.1, NA, 787.5, 
NA, 786.2, NA, 786.5, NA, 785.4, NA, 786.5, NA, 785.3, NA, 785.3, 
NA, 786.4, NA, 785.8, NA, 787.1, NA, 786.4, NA, 786.6, NA, 788.4, 
NA, 793.1, NA, 796.6, NA, 798.7, NA, 798.8, NA, 797.6, NA, 800.2, 
NA, 804.9, NA, 804.4, NA, 804.7, NA, 802.2, NA, 799.1, NA, 799.5, 
NA, 798.6, NA, 799.9, NA, 800.1, NA, 800.6, NA, 799.6, NA, 796.2, 
NA, 794.4, NA, 792.6, NA, 791.9, NA, 790.9, NA, 789, NA, 788, 
NA, 789.1, NA, 787.7, NA, 787.5, NA, 787.2, NA, 786.7, NA, 785.1, 
NA, 784.1, NA, 783.3, NA, 783.3, NA, 782.3, NA, 781.6, NA, 780.8, 
NA, 780.5, NA, 779, NA, 779.4, NA, 778.7, NA, 778.7, NA, 778.4, 
NA, 778.7, NA, 778.4, NA, 778.8, NA, 779.7, NA, 783.9, NA, 789.3, 
NA, 752.9, NA, 755.9, NA, 755.8, NA, 755.6, 755.3), BP_mbar_Avg = c(754, 
NA, 753.9, NA, 753.8, NA, 753.8, NA, 753.6, NA, 753.5, NA, 753.4, 
NA, 753.2, NA, 753.1, NA, 753.1, NA, 753.1, NA, 753.1, NA, 753.2, 
NA, 753.2, NA, 753.3, NA, 753.3, NA, 753.3, NA, 753.4, NA, 753.7, 
NA, 753.8, NA, 754.1, NA, 754.3, NA, 754.4, NA, 754.3, NA, 754.3, 
NA, 754.4, NA, 754.4, NA, 754.3, NA, 754.1, NA, 754.1, NA, 754.1, 
NA, 754, NA, 754, NA, 754, NA, 754, NA, 754, NA, 753.8, NA, 753.8, 
NA, 753.7, NA, 753.7, NA, 753.7, NA, 753.8, NA, 754, NA, 754.3, 
NA, 754.4, NA, 754.4, NA, 754.4, NA, 754.5, NA, 754.6, NA, 754.5, 
NA, 754.6, NA, 754.6, NA, 754.3, NA, 754.2, NA, 754.3, NA, 754.2, 
NA, 754.1, NA, 754.1, NA, 754, NA, 753.9, NA, 753.9, NA, 753.9, 
NA, 754, NA, 754, NA, 754, NA, 754, NA, 754, NA, 753.9, NA, 753.8, 
NA, 753.7, NA, 753.7, NA, 753.9, NA, 753.8, NA, 753.8, NA, 753.8, 
NA, 753.9, NA, 753.7, NA, 753.7, NA, 753.5, NA, 753.5, NA, 753.4, 
NA, 753.4, NA, 753.4, NA, 753.3, NA, 753.3, NA, 753.3, NA, 753.2, 
NA, 753.3, NA, 753.4, NA, 753.4, NA, 753.8, NA, 754.1, NA, 754.1, 
NA, 754, NA, 754.1, NA, 754.1, NA, 754.1, NA, 754, NA, 754, NA, 
753.9, NA, 753.7, NA, 753.5, NA, 753.3, NA, 753.2, NA, 753.1, 
NA, 753.3, NA, 753.3, NA, 753.3, NA, 753.3, NA, 753.3, NA, 753.4, 
NA, 753.4, NA, 753.4, NA, 753.5, NA, 753.6, NA, 753.7, NA, 753.8, 
NA, 754, NA, 754.1, NA, 754.2, NA, 754.3, NA, 754.4, NA, 754.4, 
NA, 754.5, NA, 754.5, NA, 754.6, NA, 754.7, NA, 754.6, NA, 754.6, 
NA, 754.5, NA, 754.4, NA, 754.6, NA, 754.7, NA, 754.4, NA, 754.4, 
NA, 754.5, NA, 754.6, NA, 754.7, NA, 754.8, NA, 755.1, NA, 755.3, 
NA, 755.4, NA, 755.4, NA, 755.5, NA, 755.6, NA, 755.5, NA, 755.5, 
NA, 755.5, NA, 755.3, NA, 755.2, NA, 755.2, NA, 755.1, NA, 755, 
NA, 754.9, NA, 754.7, NA, 754.8, NA, 754.9, NA, 755, NA, 755.1, 
NA, 755.3, NA, 755.2, NA, 755.3, NA, 755.4, NA, 755.5, NA, 755.6, 
NA, 755.7, NA, 967, NA, 1007, NA, 252.6, NA, NA), date_time = structure(c(1566856800, 
1566858420, 1566858600, 1566860220, 1566860400, 1566862020, 1566862200, 
1566863820, 1566864000, 1566865620, 1566865800, 1566867420, 1566867600, 
1566869220, 1566869400, 1566871020, 1566871200, 1566872820, 1566873000, 
1566874620, 1566874800, 1566876420, 1566876600, 1566878220, 1566878400, 
1566880020, 1566880200, 1566881820, 1566882000, 1566883620, 1566883800, 
1566885420, 1566885600, 1566887220, 1566887400, 1566889020, 1566889200, 
1566890820, 1566891000, 1566892620, 1566892800, 1566894420, 1566894600, 
1566896220, 1566896400, 1566898020, 1566898200, 1566899820, 1566900000, 
1566901620, 1566901800, 1566903420, 1566903600, 1566905220, 1566905400, 
1566907020, 1566907200, 1566908820, 1566909000, 1566910620, 1566910800, 
1566912420, 1566912600, 1566914220, 1566914400, 1566916020, 1566916200, 
1566917820, 1566918000, 1566919620, 1566919800, 1566921420, 1566921600, 
1566923220, 1566923400, 1566925020, 1566925200, 1566926820, 1566927000, 
1566928620, 1566928800, 1566930420, 1566930600, 1566932220, 1566932400, 
1566934020, 1566934200, 1566935820, 1566936000, 1566937620, 1566937800, 
1566939420, 1566939600, 1566941220, 1566941400, 1566943020, 1566943200, 
1566944820, 1566945000, 1566946620, 1566946800, 1566948420, 1566948600, 
1566950220, 1566950400, 1566952020, 1566952200, 1566953820, 1566954000, 
1566955620, 1566955800, 1566957420, 1566957600, 1566959220, 1566959400, 
1566961020, 1566961200, 1566962820, 1566963000, 1566964620, 1566964800, 
1566966420, 1566966600, 1566968220, 1566968400, 1566970020, 1566970200, 
1566971820, 1566972000, 1566973620, 1566973800, 1566975420, 1566975600, 
1566977220, 1566977400, 1566979020, 1566979200, 1566980820, 1566981000, 
1566982620, 1566982800, 1566984420, 1566984600, 1566986220, 1566986400, 
1566988020, 1566988200, 1566989820, 1566990000, 1566991620, 1566991800, 
1566993420, 1566993600, 1566995220, 1566995400, 1566997020, 1566997200, 
1566998820, 1566999000, 1567000620, 1567000800, 1567002420, 1567002600, 
1567004220, 1567004400, 1567006020, 1567006200, 1567007820, 1567008000, 
1567009620, 1567009800, 1567011420, 1567011600, 1567013220, 1567013400, 
1567015020, 1567015200, 1567016820, 1567017000, 1567018620, 1567018800, 
1567020420, 1567020600, 1567022220, 1567022400, 1567024020, 1567024200, 
1567025820, 1567026000, 1567027620, 1567027800, 1567029420, 1567029600, 
1567031220, 1567031400, 1567033020, 1567033200, 1567034820, 1567035000, 
1567036620, 1567036800, 1567038420, 1567038600, 1567040220, 1567040400, 
1567042020, 1567042200, 1567043820, 1567044000, 1567045620, 1567045800, 
1567047420, 1567047600, 1567049220, 1567049400, 1567051020, 1567051200, 
1567052820, 1567053000, 1567054620, 1567054800, 1567056420, 1567056600, 
1567058220, 1567058400, 1567060020, 1567060200, 1567061820, 1567062000, 
1567063620, 1567063800, 1567065420, 1567065600, 1567067220, 1567067400, 
1567069020, 1567069200, 1567070820, 1567071000, 1567072620, 1567072800, 
1567074420, 1567074600, 1567076220, 1567076400, 1567078020, 1567078200, 
1567079820, 1567080000, 1567081620, 1567081800, 1567083420, 1567083600, 
1567085220, 1567085400, 1567087020, 1567087200, 1567088820, 1567089000, 
1567090620, 1567090800, 1567092420, 1567092600, 1567094220, 1567094400, 
1567096020, 1567096200, 1567097820, 1567098000, 1567099620, 1567099800, 
1567101420, 1567101600, 1567103220, 1567103400, 1567105020, 1567105200, 
1567106820, 1567107000, 1567108620, 1567108800, 1567110420, 1567110600, 
1567112220, 1567112400, 1567114020, 1567114200, 1567115820, 1567116000, 
1567117620, 1567117800, 1567119420, 1567119600, 1567121220, 1567121400, 
1567123020, 1567123200, 1567124820, 1567125000, 1567126620, 1567126800, 
1567128420, 1567128600, 1567130220, 1567130400, 1567132020, 1567132200, 
1567133820, 1567134000, 1567135620, 1567135800, 1567137420, 1567137600, 
1567139220, 1567139400, 1567141020, 1567141200, 1567142820, 1567143000, 
1567144620, 1567144800, 1567146420, 1567146600, 1567148220, 1567148400, 
1567150020, 1567150200, 1567151820, 1567152000, 1567153620, 1567153800, 
1567155420, 1567155600, 1567157220, 1567157400, 1567159020, 1567159200, 
1567160820, 1567162620), class = c("POSIXct", "POSIXt"), tzone = "UTC"), 
    minute = c(0L, 27L, 30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 
    30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 
    30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 
    30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 
    30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 
    30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 
    30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 
    30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 
    30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 
    30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 
    30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 
    30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 
    30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 
    30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 
    30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 
    30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 
    30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 
    30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 
    30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 
    30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 
    30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 
    30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 
    30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 
    30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 
    30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 
    30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 
    30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 
    30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 30L, 57L, 0L, 27L, 
    30L, 57L, 0L, 27L, 57L)), class = c("spec_tbl_df", "tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -339L)))

Если вы посмотрите на таблицу, то увидите, что у вас есть эти значения в разных строках:

# A tibble: 339 x 1
   `dput(bla)`$Abs_Druck_mbar $BP_mbar_Avg $date_time          $minute
                        <dbl>        <dbl> <dttm>                <int>
 1                        NA          754  2019-08-26 22:00:00       0
 2                       789.          NA  2019-08-26 22:27:00      27
 3                        NA          754. 2019-08-26 22:30:00      30
 4                       790.          NA  2019-08-26 22:57:00      57
 5                        NA          754. 2019-08-26 23:00:00       0
 6                       789.          NA  2019-08-26 23:27:00      27
 7                        NA          754. 2019-08-26 23:30:00      30
 8                       787.          NA  2019-08-26 23:57:00      57
 9                        NA          754. 2019-08-27 00:00:00       0
10                       788.          NA  2019-08-27 00:27:00      27
# … with 329 more rows

Можно ли «соединить» 00 с 57 и30 с 27 date_time, так что это выглядит примерно так:

 # A tibble: 2 x 1
       `dput(bla)`$Abs_Druck_mbar $BP_mbar_Avg $date_time          
                            <dbl>        <dbl> <dttm>              
     1                       789.         754. 2019-08-26 22:30:00 
     2                       790.         754. 2019-08-26 23:00:00 

1 Ответ

0 голосов
/ 07 ноября 2019

В пакете lubridate есть функция round_date () , где вы можете установить единицы измерения: секунда, минута, час, день, неделя, месяц, раз в два месяца, квартал, сезон, полугодие или год.

round_date(date_time, unit = "30 minutes")
...