输出列意味着任意数量的列

时间:2018-03-06 19:46:18

标签: r

我已附上a screen shot of my data file。每列代表探针以半小时间隔收集的每日数据。我想在CSV文件中输出每个探针的每日平均值。到目前为止,我有以下代码

sink('d2.csv')
x<-1
y<-48
for(i in 1:123) {
    W=E.2.[x:y]
    M=mean(W)
    print(M)
    x<-x+48
    y<-y+48
}
sink()

分别对每列进行平均,并将其写入CSV文件。我是什么 我们要做的是拥有一个可以在所有列上运行的代码并将其写入CSV文件。

    TIMESTAMP       E.2.    E.3.    E.4.    E.5.    E.6.    E.7.    E.8.    E.9.    E.10.   E.11.   E.12.   E.13.
1   3/16/2013 0:00  108.1   166.4   238.41  261.2   373.5   324.27  278.94  514.2   629.8   607.9   334.9   323.59
2   3/16/2013 0:30  109.5   165.6   237.4   261.19  367.1   324.2   278.53  513.2   631.8   609.3   335.0   323.19
3   3/16/2013 1:00  110.6   165.5   236.48  261.17  368.1   324.2   278.13  512.4   631.2   609.3   335.0   323.56
4   3/16/2013 1:30  111.4   165.6   235.69  261.13  375.1   324.2   277.49  511.6   629.1   606.6   335.2   323.5
5   3/16/2013 2:00  112.2   165.7   234.88  261.09  379.6   324.21  276.85  510.6   629.5   607.3   335.3   323.67
6   3/16/2013 2:30  112.3   166.2   234.3   261.09  378.2   324.21  276.38  509.9   630.7   607.6   335.6   323.88

1 个答案:

答案 0 :(得分:1)

如果不了解您的数据结构以及您正在尝试做的事情,很难确切知道,但通过使用rollapply函数,您需要的所有内容都可以放在两行中代码(假设df是您的数据框的名称):

library(zoo)
write.csv(rollapply(df[,-1],48,mean,by = 4),"d2.csv")

关于修改:我使用了by = 4,因为您的代码中包含x <- x + 4行。你似乎想要增加48点。在连续的窗口现在不相交的意义上,它不再是一个滑动的意思,尽管这种方法仍然有效:

write.csv(rollapply(df[,-1],48,mean,by = 48),"d2.csv")

每列会给你123行。