【问题标题】:Return rows with closest date to a given date for several dataframes in R为 R 中的多个数据框返回与给定日期最接近的日期的行
【发布时间】:2021-05-13 04:31:19
【问题描述】:

我有 9 个不同长度的时间序列数据数据帧,每个数据帧用于不同的位置。我正在尝试找到一种方法来输入日期并让 R 一次输出包含与我的输入日期最接近的日期的所有数据帧的行。

现在,我一直在做这个:

#bring in data
MNT <- read_excel("MNT_temporal.xlsx")

#change date format
MNT$date <- ymd_hms(MNT$date)

#specifying input date
date <- ymd_hms("2017-09-11 15:47:35")

#find which row is closest to input date
which.min(abs(date - MNT$date))
[1] 6 #R returns row with closest date
MNT[6,] #view data
# A tibble: 1 x 4
  date                number.of.positives percent_inundated avg_depth_inundated
  <dttm>                            <dbl>             <dbl>               <dbl>
1 2017-09-11 15:45:00                   0                 0                  NA

这是我的一个位置 (MNT) 的数据示例:

# A tibble: 9 x 4
  date                number.of.positives percent_inundated avg_depth_inundated
  <dttm>                            <dbl>             <dbl>               <dbl>
1 2017-09-11 14:05:00                   0                 0                  NA
2 2017-09-11 14:25:00                   0                 0                  NA
3 2017-09-11 14:45:00                   0                 0                  NA
4 2017-09-11 15:05:00                   0                 0                  NA
5 2017-09-11 15:25:00                   0                 0                  NA
6 2017-09-11 15:45:00                   0                 0                  NA
7 2017-09-11 16:05:00                   0                 0                  NA
8 2017-09-11 16:25:00                   0                 0                  NA
9 2017-09-11 16:45:00                   0                 0                  NA

我的其余位置命名如下:

#bring in data
MUT <- read_excel("MUT_temporal.xlsx")
MLT <- read_excel("MLT_temporal.xlsx")
MST <- read_excel("MST_temporal.xlsx")
MOL <- read_excel("MOL_temporal.xlsx")
PNT <- read_excel("PNT_temporal.xlsx")
PUT <- read_excel("PUT_temporal.xlsx")
PLT <- read_excel("PLT_temporal.xlsx")
PST <- read_excel("PST_temporal.xlsx")

有没有办法同时对所有位置执行此操作?

【问题讨论】:

    标签: r date time-series


    【解决方案1】:

    这样怎么样?

    my_function<-function(filename){
    
      #bring in data
      file <- read_excel(filename)
      
      #change date format
      file$date <- ymd_hms(file$date)
      
      #specifying input date
      date <- ymd_hms("2017-09-11 15:47:35")
      
      #find which row is closest to input date
      rowindex<-which.min(abs(date - file$date))
      
      return(file[rowindex,])
      
    }
    
    alllocations<-paste0(c("MNT","MUT","MLT","MST","MOL","PNT","PUT","PLT","PST"),"_temporal.xlsx")
    
    savedates<-data.frame("date"=rep(0,length(alllocations)),"number.of.positives"=0, "percent_inundated"=0, "avg_depth_inundated"=0)
    
    for(i in 1:length(alllocations)){
      
      savedates[i,]<-my_function(alllocations[i])
      
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-24
      • 1970-01-01
      • 2018-06-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多