我有一个与R相关的问题,这与必须阅读许多文件并处理这些文件有关。 每个文件用于测量在不同站点的不同时间产生的臭氧。数据采用表格格式,我可以使用以下方式读取数据:
files <- list.files()
data <- lapply(files, read.table, skip=19)
这为我提供了一个我想要处理的所有文件的数据框。例如,文件名为:
> head(files)
[1] "fiji_19980105.dat" "fiji_19980112.dat" "fiji_19980119.dat"
[4] "fiji_19980130.dat" "fiji_19980206.dat" "fiji_19980213.dat"
“斐济”是电台的名称,日期是YMD格式。我想平均数据帧以获得该站的月平均值(我将只需要一次在一个站上工作,所以实际上我只想平均称为数据的数据帧以产生12组平均数据)。
我想我可以使用一些?apply函数来做到这一点,但我真的迷失了如何做到这一点。对解决方案的任何建议都非常感谢!
作为将日期添加到数据框的结果示例,我们有:
> head(dat)
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 Date
1 9000 1007.7 0.006 29.6 74 0.59 0.006 9000 9000 9000 1998-01-05
2 9000 1005.2 0.028 29.3 75 0.62 0.006 9000 9000 9000 1998-01-05
3 9000 1001.6 0.060 28.5 78 0.63 0.006 9000 9000 9000 1998-01-05
> str(dat)
'data.frame': 153994 obs. of 11 variables:
$ V1 : int 9000 9000 9000 9000 9000 9000 9000 9000 9000 9000 ...
$ V2 : num 1008 1005 1002 997 993 ...
$ V3 : num 0.006 0.028 0.06 0.104 0.14 0.169 0.198 0.238 0.271 0.301 ...
$ V4 : num 29.6 29.3 28.5 27.9 27.6 27.2 27 26.6 26.2 26 ...
$ V5 : int 74 75 78 79 80 81 82 84 85 85 ...
$ V6 : num 0.59 0.62 0.63 0.68 0.69 0.7 0.72 0.74 0.75 0.76 ...
$ V7 : num 0.006 0.006 0.006 0.007 0.007 0.007 0.007 0.008 0.008 0.008 ...
$ V8 : num 9000 9000 9000 9000 9000 9000 9000 9000 9000 9000 ...
$ V9 : num 9000 9000 9000 9000 9000 9000 9000 9000 9000 9000 ...
$ V10 : num 9000 9000 9000 9000 9000 9000 9000 9000 9000 9000 ...
$ Date: Date, format: "1998-01-05" "1998-01-05" ...
答案 0 :(得分:1)
使用您的文件列表,获取Date
s:
datetimes = as.Date(files, "fiji_%Y%m%d")
有关格式模板的详细信息,请参阅?strptime
,基本上您可以包含任何其他值作为文字填充,并忽略任何不重要的尾随字符。
其余部分要求您提供有关每个data.frame中的内容的更多信息,因此请向我们提供有关这些数据的更多信息。
最好创建一个大型data.frame,并在每行添加这些日期戳,然后从那里开始。
要做到这样的事情会起作用(想象它被称为&#39; dat&#39;而不是&#39;数据&#39;):
dat = lapply(files, read.table, skip=19)
for (i in 1:length(files)) {
dat[[i]]$Date = rep(datetimes[i], nrow(dat[[i]])
}
dat = do.call("rbind", dat)
然后,您可以使用format(dat$Date, "%m")
获取仅包含月份的每个日期的值,并使用摘要函数(例如tapply
)获取mean
。对此的经典plyr
版本将会更少,这无疑会很快出现。 :)
用lapply调用read.table
可能不是一个好主意,所以我也会更改它,这样你就可以对每个I / O和data.frames的合并进行基本检查。 。