我想创建一个数据框,其中包含每个不同变量1小时的1年读数,例如
Date Area Application Type Reading
2015-01-01 00:00:00 Livingroom Heating Electricity 0
.
.
2015-12-30 00:00:00 Livingroom Heating Electricity 0
2015-01-01 00:00:00 Livingroom Heating Gas 3
.
.
2015-12-30 00:00:00 Livingroom Heating Gas 2
2015-01-01 00:00:00 Livingroom Lighting Electricity 1
.
.
2015-12-30 00:00:00 Livingroom Lighting Electricity 2
2015-01-01 00:00:00 Livingroom Lighting Gas 3
.
.
2015-12-30 00:00:00 Livingroom Lighting Gas 2
该文件将每年扩展三个区域(客厅,卧室,走廊),三个应用(供暖,照明,电器)和两种类型(电力和燃气)。此外,对于加热,电力将为0,对于照明,气体将为零。
我的问题是如何一次性完成(使用一些for循环或任何其他功能)
我已设法使用此脚本创建此数据文件:
dates<-seq(
from=as.POSIXct("2015-1-1 0","%Y-%m-%d %H", tz="UTC"),
to=as.POSIXct("2015-12-31 23", "%Y-%m-%d %H", tz="UTC"),
by="hour"
)
df11 <- data.frame(matrix(NA, nrow = length(dates), ncol = 5))
# Define names of cols and add column
names(df11) <- c("Date", "Area", "Application", "Type", "Reading")
df11$Date <- dates
df11$Area<-"Livingroom"
df11$Application<-"Heating"
df11$Type<-"Electricity"
df11$Reading<-0
这就是我为不同变量创建18个不同文件然后在最后将它们绑定在一起的方式。
newdataset<-rbind(df11,df12,df13,df14,df15,df16,df21,df22,df23,df24,df25,df26,df31,df32,df33,df34,df35,df36)
我知道这是一种非常懒惰和肮脏的脚本。我真的想知道如何使用循环或其他方法很好地完成它。
任何建议都将不胜感激。
答案 0 :(得分:2)
您可以使用expand.grid()
在(大)数据框中获取所有因子组合:
df <- expand.grid( Date = dates , Area = c("Livingroom" , "Bedroom" , "Hallway") ,
Application = c("Heating" , "Lighting" , "Appliances") , Type = c("Electricity" , "Gas") )
然后可以添加Reading
的值:
df$Reading <- ifelse( (df$Application == "Heating" & df$Type == "Electricity") | (df$Application == "Lighting" & df$Type == "Gas") , 0 , sample(1:4, nrow(df) , replace=TRUE))