1
Datetime <- c("2016-03-03 05:30:13", "2015-03-02 12:45:00", "2016-03-01 02:53:20", "2016-02-28 03:22:18",
"2016-03-02 09:42:10", "2016-03-01 20:55:50", "2016-02-28 21:14:10", "2016-02-26 05:42:16",
"2016-03-02 08:31:15", "2016-03-02 09:13:10", "2016-03-01 00:45:14", "2016-02-26 05:56:00",
"2016-02-02 13:44:00", "2016-02-02 14:41:20", "2016-02-01 15:33:10", "2016-01-25 04:24:00",
"2016-03-02 17:24:12", "2016-03-01 17:28:16", "2016-02-28 18:22:34", "2016-02-27 02:34:31")
ID <- c("A","A","A","A","B","B","B","B","C","C","C","C","D","D","D","D","E","E","E","E")
PT <- c(27,35,38,22,35,39,7,15,37,25,38,42,45,19,17,25,32,35,39,26)
df <- data.frame(Datetime,ID,PT)
df$Datetime <- as.POSIXct(df$Datetime,format="%Y-%m-%d %H:%M:%S")
我使用這些線來設置,我想子集
today <- as.POSIXlt(Sys.time())
today$mday <- today$mday
today$hour = "6"
today$min = "30"
today$sec = "0"
Back2weeks <- today
Back1day <- today
Back2weeks$mday <- Back2weeks$mday-14
Back1day$mday <- Back1day$mday-1
我想使用的功能來自動創建ggplots輸出地塊日期時間一個數據幀每一個ID,我做這種方式
plots <- function(a) {
if (nrow(a)>0) {
ggplot(data = a,aes(x=Datetime,y=PT)) + geom_line(size = 0.5) + geom_point(size=3)
}
}
lss<-list()
plot_lss<-list()
UniqueID <- summaryBy(ID~ID, data = df, FUN = function(x) { c(n = length(x)) })
for (j in 1:(nrow(UniqueID)))
{
cat(j)
id <- as.character(UniqueID$ID[[j]])
df1 <- subset(df, ID == id)
df2 <- subset(df1, df1$Datetime>Back2weeks & df1$Datetime<today)
lss[[j]] <- df2
plotdata <- subset(df2, ID == id)
plot_lss[[j]] <- plots(plotdata)
print(plot_lss[[j]])
Sys.sleep(0)
}
雖然這在首次運行3個地塊,4號地塊不出來,因爲此ID的日期時間爲超出我的子集範圍。現在函數停在這裏,並在plot_lss [[j]]:下標越界「中出現錯誤」錯誤「,這很好,但我希望該函數繼續運行並輸出日期時間在範圍內的第5個圖。在這種情況下,如何讓函數繼續運行直到結束並防止退出循環?請在此提供您的想法。
測試if(nrow(plotdata)<1)next'條件可以做。 –
'summaryBy'從哪裏來? – Julius
我想獲得唯一的ID,所以我可以在函數中子集。我本來也可以使用「獨特」來獲得。 – Sharath