1

我有一个问题如何从表中选择某些值。我有一个包含时间和值的表,我想在一段时间后得到下面的行。

示例-Data.Frame。

Time   Value
02:51  0.08033405 
05:30  0.43456738 
09:45  0.36052075 
14:02  0.45013807 
18:55  0.05745870
....# and so on

时间编码为字符,但可以格式化。现在我有例如时间“6:15”,并且想从表中获取该时间之前和之后的时间值(0.43456738 和 0.36052075)。数据库实际上非常庞大,我有很多时间值。任何人都有一个很好的建议如何做到这一点?

谢谢鹬

4

1 回答 1

1
value_before <- example_df[which(example_df$time=="09:45")-1, ]$value
value_after <- example_df[which(example_df$time=="09:45")+1, ]$value

# This could become a function

return_values <- function(df,cutoff) {
value_before <- df[which(df$time==cutoff)-1, ]$value
value_after <- df[which(df$time==cutoff)+1, ]$value
return(list(value_before, value_after))
}

return_values(exmaple_df, "09:15")

# 大型数据集的解决方案。

library(data.table)
df <- data.frame(time = 1:1000000, value = rnorm(1000000))
# create a couple of offsets
df$nvalue <- c(df$value[2:dim(df)[1]],NA)
df$pvalue <- c(NA,df$value[2:dim(df)[1]])
new_df <- data.table(df)
setkey(new_df,"time")

new_df[time==10]
 time      value     pvalue     nvalue
[1,]   10 -0.8488881 -0.1281219 -0.5741059


> new_df[time==1234]
     time      value   pvalue     nvalue
[1,] 1234 -0.3045015 0.708884 -0.5049194
于 2012-06-08T16:00:44.380 回答