我的数据时间戳如下所示:
(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
答案 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
。