以下是.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)
答案 0 :(得分:2)
OP在没有显示“低效代码”的情况下要求“最佳和最有效的代码编码方式”,所以@Justin是对的。
似乎OP对R来说是新的(它正式为the summer of love)所以我试一试,我有一个解决方案(不确定效率......)
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