簡體   English   中英

根據連續行之間的時間差對數據幀中的行進行分組

[英]Group rows in data frame based on time difference between consecutive rows

我有這種類型的數據框

YEAR   MONTH  DAY  HOUR       LON      LAT

1860     10      3   13      -19.50   3.00          
1860     10      3   17      -19.50   4.00                          
1860     10      3   21      -19.50   5.00                          
1860     10      5   5       -20.50   6.00                          
1860     10      5   13      -21.50   7.00                          
1860     10      5   17      -21.50   8.00                          
1860     10      6   1       -22.50   9.00                          
1860     10      6   5       -22.50   10.00                         
1860     12      5   9       -22.50   -7.00                         
1860     12      5   18      -23.50   -8.00                         
1860     12      5   22      -23.50   -9.00                         
1860     12      6   6       -24.50   -10.00                                    
1860     12      6   10      -24.50   -11.00                            
1860     12      6   18      -24.50   -12.00    

我想做的是為時間上接近的點的每個子集計算插值線(例如,連續點之間的時間差小於4天;在上面的示例中有2個子集:一個從1860-10-3到1860年-10-6,另一個從1860-12-5到1860-12-6),然后創建一個額外的列,其擬合相關系數與各個子集內插線相關聯。

問題是我不知道如何根據上述標准正確地對我的數據幀進行子集化。

這是對連續行之間的時間差小於4天的行進行分組的另一種可能性。

# create date variable
df$date <- with(df, as.Date(paste(YEAR, MONTH, DAY, sep = "-")))

# calculate succesive differences between dates
# and identify gaps larger than 4
df$gap <- c(0, diff(df$date) > 4)

# cumulative sum of 'gap' variable
df$group <- cumsum(df$gap) + 1

df    
#    YEAR MONTH DAY HOUR   LON LAT       date gap group
# 1  1860    10   3   13 -19.5   3 1860-10-03   0     1
# 2  1860    10   3   17 -19.5   4 1860-10-03   0     1
# 3  1860    10   3   21 -19.5   5 1860-10-03   0     1
# 4  1860    10   5    5 -20.5   6 1860-10-05   0     1
# 5  1860    10   5   13 -21.5   7 1860-10-05   0     1
# 6  1860    10   5   17 -21.5   8 1860-10-05   0     1
# 7  1860    10   6    1 -22.5   9 1860-10-06   0     1
# 8  1860    10   6    5 -22.5  10 1860-10-06   0     1
# 9  1860    12   5    9 -22.5  -7 1860-12-05   1     2
# 10 1860    12   5   18 -23.5  -8 1860-12-05   0     2
# 11 1860    12   5   22 -23.5  -9 1860-12-05   0     2
# 12 1860    12   6    6 -24.5 -10 1860-12-06   0     2
# 13 1860    12   6   10 -24.5 -11 1860-12-06   0     2
# 14 1860    12   6   18 -24.5 -12 1860-12-06   0     2

免責聲明: diffcumsum部分受此問答的啟發: 如何將向量划分為規則的連續序列組?

我會按照這些思路嘗試一些方法。 由於您提到只需要弄清楚子集邏輯,所以我不必費心添加相關系數計算。

df$date <- as.Date(paste(df$YEAR,df$MONTH,df$DAY),'%Y %m %d')

uniquedates <- unique(df$date)
uniquedatesfourth <- uniquedates + 4

for ( i in seq(length(uniquedates)))
{
   tempsubset <- subset(df, date >= uniquedates[i] & date >= uniquedatesfourth[i])
   # operations on tempsubset
}

暫無
暫無

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

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