-1

以下是 .csv 文件中的子集数据示例。有三列没有标题。第一列代表日期/时间,第二列是负载 [kw],第三列是 1 = 工作日,0 = 周末/假期。

9/9/2010 3:00   153.94  1
9/9/2010 3:15   148.46  1

我想在 R 中编程,以便它在 9 月的一个月内的所有工作日(当第三列为 1 时)的时间范围内从 10:00 到 20:00 选择第一列和第二列并且不知道是什么最好和最有效的编码方式。

code dt <- read.csv("file", header = F, sep=",") 

#Select a column with weekday designation = 1, weekend or holiday = 0 

y <- data.frame(dt[,3]) 

#Select a column with timestamps and loads 

x <- data.frame(dt[,1:2]) 
t <- data.frame(dt[,1]) 

#convert timestamps into readable format 

s <- strptime("9/1/2010 0:00", format="%m/%d/%Y %H:%M") 
e <- strptime("9/30/2010 23:45", format="%m/%d/%Y %H:%M") 
range <- seq(s,e, by = "min") 
df <- data.frame(range)
4

1 回答 1

2

OP 要求“最好和最有效的编码方式”而不显示“低效的代码”,所以@Justin 是对的。

看来 OP 对 R 来说是新的(它正式是爱的夏天)所以我试一试,我有一个解决方案(不确定效率..)

index <- c("9/9/2010 19:00", "9/9/2010 21:15", "10/9/2010 11:00", "3/10/2010 10:30")
index <- as.POSIXct(index, format = "%d/%m/%Y %H:%M")

set.seed(1)
Data <- data.frame(Date = index, load = rnorm(4, mean = 120, sd = 10), weeks = c(0, 1, 1, 1))

## Data
##                  Date   load weeks
## 1 2010-09-09 19:00:00 113.74     0
## 2 2010-09-09 21:15:00 121.84     1
## 3 2010-09-10 11:00:00 111.64     1
## 4 2010-10-03 10:30:00 135.95     1


cond <- expression(format(Date, "%H:%M") < "20:00" & 
                   format(Date, "%H:%M") > "10:00" & 
                   weeks == 1 & 
                   format(Date, "%m") == "09")

subset(Data, eval(cond))
##                  Date   load weeks
## 3 2010-09-10 11:00:00 111.64     1
于 2012-08-10T19:02:21.280 回答