【问题标题】:Creating a dataframe in R based on different condition根据不同的条件在 R 中创建数据框
【发布时间】:2016-03-14 17:17:35
【问题描述】:

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

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

任何建议将不胜感激。

【问题讨论】:

  • 所以你想要三个因素的所有组合,对吧?您能否详细说明您希望如何定义Reading
  • David H 读数将随机创建,我使用函数sample(1:4, 8760, replace=TRUE) 正如我所说的加热,电力将是 0,照明气体将是 0 其余所有数据将由 sample 生成功能。

标签: r dataframe


【解决方案1】:

您可以使用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))

【讨论】:

  • David H 这​​是一个非常有趣且易于理解的脚本。非常感谢你。只是一个小查询,目前,此脚本首先显示每个区域和一个应用程序的数据,然后显示每个区域和第二个,然后是第三个应用程序的数据。如何首先为客厅创建与供暖、照明和电器相对应的所有数据,然后为卧室创建所有数据,最后为走廊创建所有数据。
猜你喜欢
  • 1970-01-01
  • 2016-08-06
  • 2020-07-13
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
  • 2023-01-10
  • 1970-01-01
相关资源
最近更新 更多