當我試圖回答關於堆棧溢出問題(Mapping multiple IDs using R)時,我遇到了如何完成它的問題。即,如何測試一組前後時間點之間是否存在時間點。如何判斷一組前後時間點之間是否存在一個時間點
從帖子的用戶沒有一個可重複的例子,但這是我想出了。我想用數據框emtek_file
中的前後時間測試hidenic_file$hidenic_time
中的時間點,並返回與每個hidenic_id
的時間範圍相匹配的emtek_id
。海報沒有提到它,但它似乎有可能多個emtek_id
被返回爲每個hidenic_id
。
library(zoo)
date_string <- paste("2001", sample(12, 10, 3), sample(28,10), sep = "-")
time_string <- c("23:03:20", "22:29:56", "01:03:30", "18:21:03", "16:56:26",
"23:03:20", "22:29:56", "01:03:30", "18:21:03", "16:56:26")
entry_emtek <- strptime(paste(date_string, time_string), "%Y-%m-%d %H:%M:%S")
entry_emtek <- entry_emtek[order(entry_emtek)]
exit_emtek <- entry_emtek + 3600 * 24
emtek_file <- data.frame(emtek_id = 1:10, entry_emtek, exit_emtek)
hidenic_id <- 110380:110479
date_string <- paste("2001", sample(12, 100, replace = TRUE), sample(28,100, replace = T), sep = "-")
time_string <- rep(c("23:03:20", "22:29:56", "01:03:30", "18:21:03", "16:56:26",
"23:03:20", "22:29:56", "01:03:30", "18:21:03", "16:56:26"),10)
hidenic_time <- strptime(paste(date_string, time_string), "%Y-%m-%d %H:%M:%S")
hidenic_time <- hidenic_time[order(hidenic_time)]
hidenic_file <- data.frame(hidenic_id, hidenic_time)
##Here is where I fail to write concise and working code to find what I want.
combined_file <- list()
for(i in seq(hidenic_file[,1])) {
for(j in seq(emtek_file[,1])) {
if(length(zoo(1, emtek_file[j,2:3]) + zoo(1,hidenic_file[i,2])) == 0) {next}
if(length(zoo(1, emtek_file[j,2:3]) + zoo(1,hidenic_file[i,2])) == 1) {combined_file[[i]] < c(combinedfile[[i]],emtek_file[j,1])}
}
names(combined_file)[i] <- hidenic_file[i,1]
}
你忘了'庫(動物園)',當我嘗試運行你的循環,我得到一個錯誤。對於我們來說,添加預期結果會更容易:combined_file? – agstudy
哎呦。現在用庫(動物園)編輯。我提到循環不起作用,但這是我解決我的問題的最佳嘗試。你能改說最後一句嗎? – cylondude
我對「這裏是我寫不出簡潔的地方」的理解,它工作但效率不高:)我的最後一句話,我的意思是預期的結果是什麼? – agstudy