2

1日の15分間ごと、およびその月の各日の可変フローを示す表があります。例:

date,00:00,00:15,00:30,  
01-Nov,123,345,456,  
02-Nov,234,567,890  

これを形にしたい

date,value  
01-Nov 00:00,123  
01-Nov 00:15,345  
...  
02-Nov 00:00,234 

等々。試しreshapeましたが、「変動」を指定して失敗メッセージが表示され続ける方法がわかりません。

4

4 に答える 4

2

これを試して :

require(reshape)
Df <- melt(dataframe,id.vars="date",variable_name="time")
Df <- Df[order(Df$date),]

ここで、「dataframe」は、使用しているデータ フレームの名前です。列の日付と時刻を結合する場合は、次のように使用できます。

Df2 <- with(Df,
         data.frame(
           date = paste(date,time),
           value = value
         )
       )

それでもうまくいかない場合、またはご希望の結果が得られない場合は、より多くの情報を提供していただく必要があります。

于 2010-12-22T13:10:58.767 に答える
1

現時点では、日付とデータしか持っていないように見えますが、追加したい関連する時間を知っています。これを 1 行で実行できる非常にコンパクトなメソッドがzoo パッケージに含まれている可能性がありますが、ここでは、2 日間で 2 時間間隔で (時間ラベルなしで) データを読み取り、広い範囲から再構築する 5 または 6 ステップのプロセスを示す実際の例を示します。 DateTime クラスの時刻変数を使用して、datafrm を長い形式の datafrm にフォーマットします。

require(reshape2)
txt<-"01-Nov,123,345,456,345,565,345,464,345, 123,345,456,345
02-Nov,234,567,890,345,565,345,464,345, 123,345,456,345"
 tstdf <- read.table(textConnection(txt), header=FALSE, sep=",")
mtst <- melt(tstdf, id.vars="V1",variable_name="time")
mtst$dt <- as.Date(mtst$V1, format="%d-%B")
mtst <- cbind(mtst, tm= 120*(0:11) )
mtst$dt.tm <- as.POSIXct(mtst$dt) +60*120*(0:11)
 'data.frame':  24 obs. of  6 variables:
    $ V1   : Factor w/ 2 levels " 02-Nov","01-Nov": 2 1 2 1 2 1 2 1 2 1 ...
    $ time : Factor w/ 12 levels "V2","V3","V4",..: 1 1 2 2 3 3 4 4 5 5 ...
    $ value: int  123 234 345 567 456 890 345 345 565 565 ...
    $ dt   :Class 'Date'  num [1:24] 14914 14915 14914 14915 14914 ...
    $ tm   : num  0 120 240 360 480 600 720 840 960 1080 ...
    $ dt.tm: POSIXct, format: "2010-10-31 20:00:00" "2010-11-01 22:00:00" ...

tm= の割り当てを 15*(0:95) に変更すると、私は米国東部の tz にいるため、表示される時刻に 4 時間のずれが生じます。時刻を真夜中に表示したい場合は、UCT の既定値に 4 時間のオフセットを追加できます。

mtst$dt.tm <- as.POSIXct(mtst$dt, tz="EST") +60*120*(0:11) + 60*240
于 2010-12-22T14:37:44.690 に答える
1

各行に 4 * 24 の値があるように、指定された形式の日付を含む連続した等間隔のシリーズを想定すると、次の例では、日付/時刻クラスに chron を使用して、そのための Zooreg シリーズが得られます。

library(zoo)
library(chron)

DF <- read.csv("myfile.csv", as.is = TRUE)
z <- zooreg(c(t(DF[-1])), start = as.chron(DF[1,1], "%d-%b"), freq = 4 * 24)

as.data.frame(z)行名に時間を含むデータフレームに変換するかdata.frame(Time = time(z), Value = coredata(z))、時間を独自の列にします(ただし、さらに操作するのがより便利になるため、zooregシリーズのままにしておく方がよい場合があります)。

于 2010-12-23T07:54:59.257 に答える
0

xts ソリューションは次のとおりです。

library(xts)
# Sample data:
Lines <- "date,00:00,00:15,00:30
01-Nov,123,345,456
02-Nov,234,567,890"
con <- textConnection(Lines)
Data <- read.csv(con, stringsAsFactors=FALSE)
close(con)
# times to add to the date for each column
mins <- as.numeric(gsub("[[:alpha:]]","",colnames(Data))) / 0.6 * 3600
# POSIXct index for xts object
idx <- as.POSIXct(Data$date, format="%d-%b")
# Create a list of xts object and rbind them
x <- do.call(rbind, lapply(2:4, function(i) xts(Data[,i], idx+mins[i])))
于 2010-12-22T15:21:31.243 に答える