-1

.csv ファイルのサブセット データの例を次に示します。ヘッダーのない 3 つの列があります。最初の列は日付/時刻を表し、2 番目の列は負荷 [kw]、3 番目の列は 1 = 平日、0 = 週末/休日です。

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

R でプログラムしたいので、9 月のすべての平日 (3 番目の列が 1 の場合) の 10:00 から 20:00 までの時間範囲内で 1 番目と 2 番目の列を選択し、それが何であるかわからないコーディングするための最良かつ最も効率的な方法。

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 に答える