5

d という名前のデータフレームには、次のデータが含まれています。

timestamp,value
"2013-06-02 00:00:00",70
"2013-06-02 00:02:00",70
"2013-06-02 00:07:00",60
"2013-06-02 00:15:00",70
"2013-06-02 00:12:00",60
"2013-06-02 00:30:00",70
"2013-06-02 00:45:00",70
"2013-06-02 01:00:00",70

私が持っているコードは次のとおりです。

 d = read.csv(path, header=TRUE, sep=",")
 d2 <- xts(x = d[c("value")], order.by = as.POSIXct(d[, "timestamp"], tz = "GMT", format = "%Y-%m-%d %H:%M:%S"))
ends <- endpoints(d2, on = "minutes", k = 15)
d3   <- period.apply(d2, ends, mean)

その後、xts オブジェクトをデータフレームに変換したいので、これを使用しています。

d3$timestamp = rownames(d3)
rownames(d3) = NULL
d3$timestamp = strptime(d3$timestamp, "%Y-%m-%d %H:%M:%S")

ただし、最後のステップでは、エラーを次のように出力します。

Error in NextMethod(.Generic) : 
   number of items to replace is not a multiple of replacement length

コマンド全体の後に d3 と入力すると、オブジェクトのデータ形式は次のようになります。

                         timestamp
2013-06-02 00:15:00        65
2013-06-02 00:30:00        70
2013-06-02 00:45:00        70
2013-06-02 01:00:00        70

ただし、列名には名前の値が含まれている必要があり、2 番目の列にはhereのようなタイムスタンプが含まれている必要があります。何が間違っている可能性がありますか?

正しい出力は次のようになります。

      value
        65  2013-06-02 00:15:00
        70  2013-06-02 00:30:00
        70  2013-06-02 00:45:00
        70  2013-06-02 01:00:00 
4

2 に答える 2

10

たとえば、次のように data.frame を作成できます。

 data.frame(value=coredata(d3),timestamp=index(d3))
# value           timestamp
# 1    65 2013-06-02 00:12:00
# 2    70 2013-06-02 00:15:00
# 3    70 2013-06-02 00:30:00
# 4    70 2013-06-02 00:45:00
# 5    70 2013-06-02 01:00:00

また、使用read.zooしてデータを Zoo オブジェクトとして読み取り、xts を手動で強制しないようにすることをお勧めします。例えば:

dat <- read.zoo(text='timestamp,value
"2013-06-02 00:00:00",70
"2013-06-02 00:02:00",70
"2013-06-02 00:07:00",60
"2013-06-02 00:15:00",70
"2013-06-02 00:12:00",60
"2013-06-02 00:30:00",70
"2013-06-02 00:45:00",70
"2013-06-02 01:00:00",70',tz ='' , format = "%Y-%m-%d %H:%M:%S",header=TRUE,
         sep=',')
d2 <- as.xts(dat)
于 2013-06-06T13:41:35.720 に答える