XTS

2017-01-03 12 views
1

Iは、2つの列のデータが設定されているを使用して、不規則な毎時データから毎日の平均値を計算します。時系列は不規則な毎時のデータです、私は毎日の平均データを計算する必要があります。XTS

私の問題は、最終的なファイルではなく、全体Ozone列の一つの値だけを持っています。私はいくつかの異なるバージョンを試しましたが、私は問題を解決できません。ここで

dataset1 <- structure(list(Date = structure(1:3, .Label = c("7/11/2013 18:33", 
    "7/11/2013 18:34", "7/11/2013 18:35"), class = "factor"), ozone = c(40.7, 40.4, 
    40.9)), .Names = c("Date", "ozone"), row.names = c(NA, 3L), class = "data.frame") 
#convert dataframe to xts object 
library(xts) 
xt1 <- xts(dataset1[,-1], 
      order.by = as.POSIXct(dataset1$Date, format= "%m/%d/%Y %H:%M")) 
x_updated <- apply.daily(xt1, colMeans) 
#convert back the dataset to data.frame 
write.csv(as.data.frame(x_updated), file="daily") 
+0

@DarshanBaral確認、DATASET1 < - 構造(リスト(X = 1:3、日付=構造(1:3、.LABEL = C( "2013年7月11日午後6時33"、 「7オゾン= c(40.7, 40.4,40.9))、.Names = c( "X"、/ 11/2013 18:34 "、" 7/11/2013 18:35 ")、class =" factor " "date"、 "ozone")、row.names = c(NA、 3L)、クラス= "data.frame" – nil

答えて

1

はdplyrソリューションです:

library(dplyr) 

df2 <- dataset1 %>% 
    mutate(date2 = as.Date(dataset1$Date)) %>% 
    group_by(date2) %>% 
    mutate(avg_ozone = mean(ozone)) %>% 
    select(Date, ozone, avg_ozone) 
+0

この代替ソリューションをありがとうございます! – nil

1
# Get 'day' from 'datetime' 
# dataset1$day = as.POSIXct(dataset1$Date, format='%d/%m/%Y') # Apparently this caused problem 
dataset1$day = do.call(rbind, strsplit(as.character(dataset1$Date)," "))[,1] 

# Get Daily Averages 
daily_averages = aggregate(ozone~day, dataset1, mean) 
+1

ありがとう!それは解決される。 – nil

+0

私はこのアプローチが適切な解決策を提供していないことを認識しました。日付は混在しています。たとえば、元のファイルの最初の日付は11.7.2013、平均日次データは01.08.2013に開始されます。 – nil

+1

私はこのように解決しました: 日= as.POSIXct(dataset1 $日付、形式= "%m /%d /%Y") 毎日<集計(dataset1 [、1:3]、by = list(day )、mean)助けてくれてありがとう! – nil

1

私はタイプミスを修正した後、あなたの出力に問題があるだろうと私に示唆してあなたの再現性のある例では何も(ありませんあなたのas.POSIXctコールへのformat引数 - 元は"%m\%d\%y %H:%M"でした)。つまり、あなたの例は1日のデータしか持っていなかったので、ファイルには1行の出力しかないはずです。ここで

は「毎日」ファイルに複数の観測があります示して再現性の例です。

# re-create example data 
set.seed(21) 
Data <- data.frame(Date=seq(ISOdate(2017, 1, 1), ISOdate(2017, 1, 3), by="hours")) 
Data$Ozone <- rnorm(NROW(Data)) 
Data$Date <- format(Data$Date, "%m/%d/%Y %H:%M") 
# convert to xts 
library(xts) 
xt1 <- xts(Data[,-1], as.POSIXct(Data$Date, format="%m/%d/%Y %H:%M")) 
x_updated <- apply.daily(xt1, colMeans) 
# convert to data.frame 
write.csv(as.data.frame(x_updated)) 
# "","V1" 
# "2017-01-01 23:00:00",0.038108046611944 
# "2017-01-02 23:00:00",-0.0380170075916872 
# "2017-01-03 12:00:00",0.612294079665861