56

私はRを初めて使用しますが、処理しようとしている大規模なデータセットの問題を解決するためにRに目を向けました。現在、次のように、分間隔のタイムスタンプ (月/日/年の時:分) (X 値) に対して設定された 4 列のデータ (Y 値) があります。

    timestamp          tr            tt         sr         st  
1   9/1/01 0:00   1.018269e+02   -312.8622   -1959.393   4959.828  
2   9/1/01 0:01   1.023567e+02   -313.0002   -1957.755   4958.935  
3   9/1/01 0:02   1.018857e+02   -313.9406   -1956.799   4959.938  
4   9/1/01 0:03   1.025463e+02   -310.9261   -1957.347   4961.095  
5   9/1/01 0:04   1.010228e+02   -311.5469   -1957.786   4959.078

私が抱えている問題は、いくつかのタイムスタンプ値が欠落していることです。たとえば、9/1/01 0:13 と 9/1/01 0:27 の間にギャップがあり、そのようなギャップはデータセット全体で不規則です。これらのシリーズのいくつかを同じデータベースに入れる必要があります。欠損値はシリーズごとに異なるため、現在、日付は各行で整列していません。

これらの欠落しているタイムスタンプの行を生成し、Y 列を空白の値 (ゼロではなくデータなし) で埋めて、連続した時系列を取得したいと考えています。

正直なところ、どこから始めればよいかよくわかりません (以前は R を実際に使用していなかったので、学習しながら学習していきます!)、どんな助けでも大歓迎です。これまでに chron と Zoo をインストールしてきました。

ありがとう!

4

9 に答える 9

2
# some made-up data
originaldf <- data.frame(timestamp=c("9/1/01 0:00","9/1/01 0:01","9/1/01 0:03","9/1/01 0:04"),
    tr = rnorm(4,0,1),
    tt = rnorm(4,0,1))

originaldf$minAsPOSIX <- as.POSIXct(originaldf$timestamp, format="%m/%d/%y %H:%M", tz="GMT")

# Generate vector of all minutes
ndays <- 1 # number of days to generate
minAsNumeric <- 60*60*24*243 + seq(0,60*60*24*ndays,by=60)

# convert those minutes to POSIX
minAsPOSIX <- as.POSIXct(minAsNumeric, origin="2001-01-01", tz="GMT")

# new df
newdf <- merge(data.frame(minAsPOSIX),originaldf,all.x=TRUE, by="minAsPOSIX")
于 2013-05-28T11:20:48.553 に答える
0

上記の方法で取得した NA 値をゼロに置き換えたい場合は、次のようにします。

df[is.na(df)] <- 0

(もともとIbollarの回答にコメントしたかったのですが、必要な評判がなかったため、回答として投稿しました)

于 2016-02-16T17:32:03.437 に答える
0
df1.zoo <- zoo(df1[,-1], as.POSIXlt(df1[,1], format = "%Y-%m-%d %H:%M:%S")) #set date to Index: Notice that column 1 is Timestamp type and is named as "TS"

full.frame.zoo <- zoo(NA, seq(start(df1.zoo), end(df1.zoo), by="min")) # zoo object
full.frame.df  <- data.frame(TS = as.POSIXlt(index(full.frame.zoo), format = "%Y-%m-%d %H:%M:%S")) # conver zoo object to data frame

full.vancouver <- merge(full.frame.df, df1, all = TRUE) # merge
于 2016-09-07T21:45:09.963 に答える