使用 R 中的列创建时间间隔
Create time intervals using a column in R
我有一列由日期组成的数据框,比方说以这种形式
d$x<-c("2014-05-01 11:36:12", "2014-05-01 11:36:14", "2014-05-01 11:36:15",
"2014-05-01 11:36:16", "2014-05-01 11:36:16", "2014-05-01 11:36:17")
并想用
建立间隔
- 分钟:元素 - 60 秒和
- 最大:元素 + 60 秒
每一行。
然后我必须找到另一列的元素,假设它是
d$y<-c("2014-05-01 11:38:21", "2014-05-01 11:42:26", "2014-05-01 11:47:37",
"2014-05-01 11:53:44" ,"2014-05-01 11:59:23", "2014-05-01 12:04:39")
是否属于这些间隔中的任何一个。
我使用了 for
循环和 if
,但我的数据很长,所以这对我来说似乎不是一个好的选择。 length(d$x)
大约是 36000 和 length(d$y) = 100
。这是我当前的代码:
$k<-rep(0,length(d$x))
for (i in 1:(length(d$y))) {
for (j in 1:(d$x)) {
if ((d$y[i] <= d$x[j]+60) & (d$y[i] >=d$x[j]-60))
k[i]=i
}
}
使用 sqldf
包:
#data
datx <- data.frame(x=as.POSIXct(c("2014-05-01 11:36:12",
"2014-05-01 11:36:14",
"2014-05-01 11:36:15",
"2014-05-01 11:36:16",
"2014-05-01 11:36:16",
"2014-05-01 11:36:17")))
daty <- data.frame(y=as.POSIXct(c("2014-05-01 11:38:21",
"2014-05-01 11:42:26",
"2014-05-01 11:38:33",
"2014-05-01 11:53:44",
"2014-05-01 11:59:23",
"2014-05-01 12:04:39")))
myInterval <- 180 #3*60sec = 3 minutes
require(sqldf)
#get y within x +/-interval
res <-
fn$sqldf("SELECT distinct(b.y)
FROM datx a, daty b
WHERE b.y BETWEEN a.x-$myInterval
AND a.x+$myInterval")
#output
res
# y
# 1 2014-05-01 11:38:21
# 2 2014-05-01 11:38:33
#get index
which(daty$y %in% res$y)
# [1] 1 3
我有一列由日期组成的数据框,比方说以这种形式
d$x<-c("2014-05-01 11:36:12", "2014-05-01 11:36:14", "2014-05-01 11:36:15",
"2014-05-01 11:36:16", "2014-05-01 11:36:16", "2014-05-01 11:36:17")
并想用
建立间隔- 分钟:元素 - 60 秒和
- 最大:元素 + 60 秒
每一行。 然后我必须找到另一列的元素,假设它是
d$y<-c("2014-05-01 11:38:21", "2014-05-01 11:42:26", "2014-05-01 11:47:37",
"2014-05-01 11:53:44" ,"2014-05-01 11:59:23", "2014-05-01 12:04:39")
是否属于这些间隔中的任何一个。
我使用了 for
循环和 if
,但我的数据很长,所以这对我来说似乎不是一个好的选择。 length(d$x)
大约是 36000 和 length(d$y) = 100
。这是我当前的代码:
$k<-rep(0,length(d$x))
for (i in 1:(length(d$y))) {
for (j in 1:(d$x)) {
if ((d$y[i] <= d$x[j]+60) & (d$y[i] >=d$x[j]-60))
k[i]=i
}
}
使用 sqldf
包:
#data
datx <- data.frame(x=as.POSIXct(c("2014-05-01 11:36:12",
"2014-05-01 11:36:14",
"2014-05-01 11:36:15",
"2014-05-01 11:36:16",
"2014-05-01 11:36:16",
"2014-05-01 11:36:17")))
daty <- data.frame(y=as.POSIXct(c("2014-05-01 11:38:21",
"2014-05-01 11:42:26",
"2014-05-01 11:38:33",
"2014-05-01 11:53:44",
"2014-05-01 11:59:23",
"2014-05-01 12:04:39")))
myInterval <- 180 #3*60sec = 3 minutes
require(sqldf)
#get y within x +/-interval
res <-
fn$sqldf("SELECT distinct(b.y)
FROM datx a, daty b
WHERE b.y BETWEEN a.x-$myInterval
AND a.x+$myInterval")
#output
res
# y
# 1 2014-05-01 11:38:21
# 2 2014-05-01 11:38:33
#get index
which(daty$y %in% res$y)
# [1] 1 3