【发布时间】:2015-09-14 08:42:51
【问题描述】:
可能我的问题标题不合适,抱歉。我有一个名为“table_parameter”的 csv 文件。 Please, download from here.。数据如下所示:
time Avg.PM10 sill range nugget
1 1 2012030101 52.269231 0.11054330 45574.072 0.037261216
2 2 2012030102 55.314286 0.20250974 87306.391 0.048315377
3 3 2012030103 56.038095 0.17711558 56806.827 0.034956709
4 4 2012030104 55.904762 0.16466350 104767.669 0.030752835
5 5 2012030105 57.123810 0.23638953 87306.391 0.037308364
6 6 2012030106 58.542857 0.24130317 87306.391 0.042108754
7 7 2012030107 60.066667 0.20362439 87306.391 0.037353980
8 8 2012030108 63.790476 0.19417801 87306.391 0.034144464
.
.
.
在我的数据框中,有一个名为 time 的变量以数字形式包含从 2012 年 3 月 1 日到 2012 年 3 月 7 日的小时值。例如 2012 年 3 月 1 日,凌晨 1 点写成 2012030101 等等。
我想在时间上对这个数据帧进行子集化。我想要一个数据框只包含每 7 天的早晨时间。早上的时间是凌晨 1 点到 5 点。这意味着我想要一个数据框,其中包含属于 2012030101 到 2012030105、2012030201 到 2012030205 .......2012030701 到 2012030705 的所有值。换句话说,我想要一个数据框如下:
time Avg.PM10 sill range nugget
1 49 49 2012030301 17.371429 0.7154449 48239.54 0.17163448
2 50 50 2012030302 17.811321 1.1201199 117603.55 0.12425337
3 51 51 2012030303 17.094340 0.5799705 55103.16 0.12061258
4 52 52 2012030304 16.679245 0.8486774 86725.77 0.15210005
5 53 53 2012030305 16.885714 1.2408621 154677.61 0.09743375
6 73 73 2012030401 21.619048 0.4417369 104767.67 0.08567888
7 74 74 2012030402 20.485714 2.0271124 215474.54 0.06340464
8 75 75 2012030403 20.552381 0.4509354 104767.67 0.06319812
9 76 76 2012030404 20.104762 0.4438798 104767.67 0.05639840
10 77 77 2012030405 20.133333 0.5050201 104767.67 0.09037341
.
.
.
为此,我编写了以下代码:
table<-read.csv("table_parameter.csv")
table
table_morning<-subset(table, time %in% c(2012030101:2012030105,
2012030201:2012030205,
2012030301:2012030305,
2012030401:2012030405,
2012030501:2012030505,
2012030601:2012030605,
2012030701:2012030705) & Avg.PM10 <=30)
table_morning
但是这段代码效率不高。如你所见,我将所有小时值都写入了子集!如果想90天做同样的工作,那效率很低。那么,我怎样才能有效地做这个子集呢?如果您有任何进一步的疑问,请告诉我。
【问题讨论】:
-
您可以在数据集中创建一个新变量“小时”(因为您的时间变量是数字,您可以尝试时间 %/% 100)。然后基于此子集。