我试图分解我的以前的问题,并制定一个不同步骤的计划,以实现我最终想要的目标。目前,我正在尝试通过循环查找每个唯一源(如下表中所示的
例如,我已经获得了以下配置文件,告诉我在每个4个季节的典型工作日的哪些小时内系统处于开启状态。请注意,某些源在一天内的多个时段内都处于开启状态,因此您可以看到第二行重复了2个时段。
我现在想做的是在
我正在苦恼如何用多个if条件进行类似于vlookup的操作并将值粘贴到新列中的编程概念。例如,对于我的样本数据,循环应该创建2个程序,因为
例如,表2的第一行应将季节列的值与
冬天的例子: 春天的例子: 我已经用以下代码获得了列的唯一值:
source
列)是否开启机械系统。例如,我已经获得了以下配置文件,告诉我在每个4个季节的典型工作日的哪些小时内系统处于开启状态。请注意,某些源在一天内的多个时段内都处于开启状态,因此您可以看到第二行重复了2个时段。
现在我要做的是创建一些样本日期,并通过每个唯一源进行循环,根据Profile
表中提供的信息,仅表示特定小时的系统开启或关闭状态。到目前为止,我所做的是使用以下代码创建上面的表:
下面的代码将创建以上表格:
# create dates table
dates =data.frame(dates=seq(
from=as.POSIXct("2010-1-1 0:00", tz="UTC"),
to=as.POSIXct("2012-12-31 23:00", tz="UTC"),
by="hour"))
# add year month day hour weekday column
dates$year <- format(dates[,1], "%Y") # year
dates$month <- format(dates[,1], "%m") # month
dates$day <- format(dates[,1], "%d") # day
dates$hour <- format(dates[,1], "%H") # hour
dates$weekday <- format(dates[,1], "%a") # weekday
# set system locale for reproducibility
Sys.setlocale(category = "LC_TIME", locale = "en_US.UTF-8")
# calculate season column
d = function(month_day) which(lut$month_day == month_day)
lut <- data.frame(all_dates = as.POSIXct("2012-1-1") + ((0:365) * 3600 * 24),
season = NA)
lut <- within(lut, { month_day = strftime(all_dates, "%b-%d") })
lut[c(d("Jan-01"):d("Mar-15"), d("Nov-08"):d("Dec-31")), "season"] = "winter"
lut[c(d("Mar-16"):d("Apr-30")), "season"] = "spring"
lut[c(d("May-01"):d("Sep-27")), "season"] = "summer"
lut[c(d("Sep-28"):d("Nov-07")), "season"] = "autumn"
rownames(lut) = lut$month_day
dates = within(dates, {
season = lut[strftime(dates, "%b-%d"), "season"]
})
我现在想做的是在
profile
表中为Source
列中的每个唯一值添加右侧的列,并根据以下标准估计数据集中每个小时系统是否开启或关闭。我正在苦恼如何用多个if条件进行类似于vlookup的操作并将值粘贴到新列中的编程概念。例如,对于我的样本数据,循环应该创建2个程序,因为
Source
列只有2个唯一来源Stack 1
和Stack 2
。棘手的部分是将需要类似以下内容的if语句:例如,表2的第一行应将季节列的值与
profile
表匹配,并查看该小时是否落在该特定季节的系统开启期间。如果它在规定的时间内,则说“开启”,如果在外面就说“关闭”。因此,结果应该像下图所示的2个红色字体列一样:冬天的例子: 春天的例子: 我已经用以下代码获得了列的唯一值:
values <- unique(profile$Source)
但现在使用for循环无法继续工作。
我想知道有没有人能够给我任何建议,如何使用循环在表2中创建2列唯一来源?
以下是我正在使用的典型每周“概要”数据表:
> dput(profile)
structure(list(`Source no` = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), Source = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L), .Label = c("Stack 1", "Stack 2"), class = "factor"),
Period = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), Day = structure(c(2L,
6L, 7L, 5L, 1L, 3L, 4L, 2L, 6L, 7L, 5L, 1L, 3L, 4L, 2L, 6L,
7L, 5L, 1L, 3L, 4L), .Label = c("Fri", "Mon", "Sat", "Sun",
"Thu", "Tue", "Wed"), class = "factor"), `Spring On` = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 15L,
15L, 15L, 15L, 15L, 15L, 15L), `Spring Off` = c(23L, 23L,
23L, 23L, 23L, 23L, 23L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 18L,
18L, 18L, 18L, 18L, 18L, 18L), `Summer On` = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L), .Label = "off", class = "factor"), `Summer Off` = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L), .Label = "off", class = "factor"), `Autumn On` = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L), .Label = "off", class = "factor"), `Autumn Off` = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L), .Label = "off", class = "factor"), `Winter On` = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L,
2L, 2L, 2L, 2L, 2L), .Label = c("0", "off"), class = "factor"),
`Winter Off` = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("23",
"off"), class = "factor")), .Names = c("Source no", "Source",
"Period", "Day", "Spring On", "Spring Off", "Summer On", "Summer Off",
"Autumn On", "Autumn Off", "Winter On", "Winter Off"), class = "data.frame", row.names = c(NA,
-21L))
非常感谢
dates = data.frame(dates =seq(as.Date('2010-01-01'),as.Date('2012-12-31'),by = "hour"))
- Pierre Ldates =data.frame(dates=seq(from=as.POSIXct("2010-1-1 0:00", tz="UTC"), to=as.POSIXct("2012-12-31 23:00", tz="UTC"), by="hour"))
- Achak