根据不同的条件在{R}中创建数据框

时间:2016-03-14 17:17:35

标签: r dataframe

我想创建一个数据框,其中包含每个不同变量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)

我知道这是一种非常懒惰和肮脏的脚本。我真的想知道如何使用循环或其他方法很好地完成它。

任何建议都将不胜感激。

1 个答案:

答案 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))