簡體   English   中英

R-根據另一個文件中的數據有條件地從一個文件中提取數據

[英]R- Conditionally extracting data from one file based on data in another file

我有兩個具有不同頻率的不同時間戳數據文件。 我想根據第二個數據文件在(+ _2分鍾)范圍內的時間戳(YY:DD:MM HH:MM:00)從一個文件(YY:DD:MM HH:MM:SS)中提取數據。 我需要根據第二個數據的每個時間戳值提取數據。

我該如何解決? 我需要申請循環賽或其他嗎? 我在R中使用xts包和newcomer

您沒有提供可復制的示例,因此很難解決您的問題,但是請嘗試修改以下代碼:

輸入 :來自兩個文件的兩個data.frames:

df1<-data.frame(ts1=c("18: 24: 03 11: 12: 13","18: 24: 03 11: 20: 13","18: 24: 03 11: 21: 33"),b=c(1,2,3))
df2<-data.frame(ts2=c("18: 24: 03 9: 50: 00","18: 24: 03 11: 20: 00"))
df1
                    ts1 b
1 18: 24: 03 11: 12: 13 1
2 18: 24: 03 11: 20: 13 2
3 18: 24: 03 11: 21: 33 3

df2
                        ts2
    1  18: 24: 03 9: 50: 00
    2 18: 24: 03 11: 20: 00

函數f與間隔日期進行匹配

f<-function(ts,ts2)
{

  out<-(as.POSIXct(ts,format="%y: %d: %m %H: %M: %S")<=as.POSIXct(ts2,format="%y: %d: %m %H: %M: %S")+2*60) & (as.POSIXct(ts,format="%y: %d: %m %H: %M: %S")>=as.POSIXct(ts2,format="%y: %d: %m %H: %M: %S")-2*60)
  return(as.logical(max(out)))
}

您想要的輸出

df1[unlist(lapply(as.POSIXct(df1$ts1,format="%y: %d: %m %H: %M: %S"),f,ts2=df2$ts2)),]
                    ts1 b
2 18: 24: 03 11: 20: 13 2
3 18: 24: 03 11: 21: 33 3

顯然,這只是一條幫助您實現代碼的途徑

使用不同的時間戳格式更新

Input:
    df1<-data.frame(a=c(2,5,8,2),ts1=c("2017-10-07 16:51:08.000","2017-10-07 16:51:10.000","2017-10-07 16:52:15.000","2017-10-07 16:53:25.000"))
    df2<-data.frame(ts2=c("2017-10-07 16:50:00","2017-10-07 16:51:00","2017-10-07 16:53:00"))

相同的方法:

f<-function(ts,ts2)
 {

   out<-(as.POSIXct(ts)<=as.POSIXct(ts2)+2*60) & (as.POSIXct(ts)>=as.POSIXct(ts2)-2*60)
   return(as.logical(max(out)))
 }

您的輸出:

df1[unlist(lapply(as.POSIXct(df1$ts1),f,ts2=df2$ts2)),]
  a                     ts1
1 2 2017-10-07 16:51:08.000
2 5 2017-10-07 16:51:10.000
3 8 2017-10-07 16:52:15.000
4 2 2017-10-07 16:53:25.000

例如,我們有兩個數據表輸出數據和輸入數據。 定義一個for循環並創建一個窗口(+-2分鍾),最后rbind所有數據。

這里w_low = time-2min w_high = time + 2min final = data.table()for(i in 1:nrow(Output)){t_low <-Output [i,DateTime]-w_low * 60 t_high <-Output_Data [i, DateTime]-w_high * 60

input_subset <-輸入[TIMESTAMP> = t_low&TIMESTAMP <t_high] n = nrow(input_subset)

input_subset [,TIMESTAMP:= difftime(TIMESTAMP,t_low,units =“ secs”)]

input_subset $ output_index <-rep(i,n)final = rbind(OF,input_subset,fill = TRUE)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM