想要平均每日温度

时间:2016-03-08 20:36:14

标签: r time timestamp average series

我的数据时间戳如下所示:

(col V1是一年,V2是一年中的一天,V2是每30分钟一次)。

    V1 V2  V3 V4 V5        V6        V7        V8        V9        V10      V11      
1 2009  1   0 NA NA 112.67702  98.59882 -7.290186 0.3382428 0.14929900 6.668614 
2 2009  1  30 NA NA  79.56672  74.99058 -7.356445 0.3258001 0.13855380 6.345498 
3 2009  1 100 NA NA 151.99107 129.30848 -7.400850 0.3475700 0.15769250 6.771588 
4 2009  1 130 NA NA  85.98330  69.35902 -7.577969 0.2079333 0.05647759 6.148865 
5 2009  1 200 NA NA  81.63526  69.48286 -7.587354 0.3306208 0.14272100 5.249530 
6 2009  1 230 NA NA 103.38915  90.44430 -7.500925 0.2955433 0.11396920 5.321435 
           V16      V17 V18 V19
1 -0.000167956 253.9534   0  NA
2 -0.000170257 256.4038   0  NA
3 -0.000112737 239.7196   0  NA
4 -0.000172556 223.8581   0  NA
5 -0.000138045 206.6773   0  NA
6 -0.000144948 201.8427   0  NA

我希望平均温度是具有很多NA值的列V19。我做了什么似乎不正确?

options(stringsAsFactors = FALSE)
stannardrock <-read.table("~/Documents/USstandardrock/stannardrock_2009_14noice.txt", quote="\"", comment.char="", na.strings="-9999",header=F)
head(stannardrock)

stdir <- stannardrock
stdir$Date <-seq(as.POSIXct("2009-01-01 00:00"), as.POSIXct("2014-12-31 23:30"),by = 1800)

stdir[which(stdir < 0)] <- -9999
stdir$dateday <- cut(as.POSIXct(paste(stdir$V1,stdir$V2),format = "%Y%d"),breaks="day")
head(stdir)

means <- aggregate(stdir$V19 ~ dateday, stdir, mean)
head(means)
print(means

1 个答案:

答案 0 :(得分:1)

首先,如果V2是一年中的某一天,则应使用%j代替%d

stdir$dateday <- cut(as.POSIXct(paste(stdir$V1,stdir$V2),format = "%Y%j"),breaks="day")

然后我认为你应该尝试类似的事情:

means <- aggregate(V19 ~ dateday, stdir, mean, na.rm=TRUE)

避免使用NAs