2013-03-22 109 views
4

我有以下形式的數據幀:分割或子集數據轉換成以30個分鐘間隔

Temp Depth  Light x time date     time.at.depth 
104  18.59  -2.7 27 21:38 2012-06-20    4 
109  18.59  -2.7 27 22:02 2012-06-20    5 
110  18.75  -4.0 27 22:07 2012-06-20    5 
113  18.91  -2.7 27 22:21 2012-06-20    4 
114  18.91  -4.0 27 22:26 2012-06-20    5 
115  18.91  -2.7 27 22:31 2012-06-20    5 
117  18.91  -2.7 27 22:40 2012-06-20    4 
118  18.75  -4.0 27 22:45 2012-06-20    5 
119  18.75  -2.7 27 22:50 2012-06-20    5 
121  18.59  -4.0 27 22:59 2012-06-20    4 
122  18.75  -2.7 27 23:04 2012-06-20    5 
123  18.75  -4.0 27 23:09 2012-06-20    5 
126  18.59  -2.7 27 23:23 2012-06-20    5 
127  18.59  -2.7 27 23:28 2012-06-20    5 
128  18.59  -4.0 27 23:33 2012-06-20    5 
133  18.75  -4.0 27 23:57 2012-06-20    5 
136  18.59  -4.0 27 00:11 2012-06-20    5 
138  18.59  -2.7 27 00:21 2012-06-20    5 
140  18.91  -2.7 27 00:30 2012-06-20    5 

我想數據子集分爲30分鐘箱。是否有捷徑可尋?我看着split()函數,但它似乎需要以數字格式才能正常工作,我有時間以POSIXct格式。任何想法將不勝感激。

+0

你看過cut()函數嗎? – screechOwl 2013-03-23 13:03:44

+0

這看起來很相關:http://stackoverflow.com/questions/7528571/aggregate-count-occurences-of-values-over-arbitrary-timeframe – Ben 2013-03-24 23:43:37

回答

4

這裏的一個單行你(dat是你的數據幀):

split(dat, cut(strptime(paste(dat$date, dat$time), format="%F %R"),"30 mins")) 

事實上cut.POSIXt接受爲斷點值

的間隔說明書中, 「秒」, 「分鐘」 的一個,「小時」,「日」,「DSTday」,「星期」,「月」,「季度」或「年」,可選地以整數和空格開頭,或者後面跟着「s」。

Additionnaly,我用%F %R作爲快捷方式%Y-%m-%d %H:%M:看?strptime看到所有可能的格式。

+2

儘管有點警告,但在你給出的例子中,如果它的意思是按照正確的順序,你午夜過後的價值應該改爲「2012-06-21」,否則它們會被'strptime'錯誤翻譯。 – plannapus 2013-03-25 07:35:29

+0

謝謝,這完美地將數據分成30分鐘的間隔。有沒有辦法使用'apply()'或其他函數來查找每個間隔期間溫度的平均值和標準誤差? – user1997414 2013-03-26 12:08:27

+1

使用'lapply'。例如,如果您將我的答案的結果保存爲'res':'lapply(res,function(x)mean(x $ Temp))'或'lapply(res,function(x)sd(x $ Temp))' 。 – plannapus 2013-03-26 12:20:05

相關問題