2016-06-11 11 views
1

私は時間スタンプと対応する温度を測定したデータフレームを持っています。測定は、時間の経過と共にランダムな間隔で連続的に行われる。時間をそれぞれの日時と温度に換算したいと思います。私のデータフレームは、次のようになります。(測定は20/05/2016に開始)時間と時刻を変換する

Time, Temp 
09.25,28 
10.35,28.2 
18.25,29 
23.50,30 
01.10,31 
12.00,36 
02.00,25 

私は以下のように、それぞれの日時及び温度でdata.frameを作成したいと思います:

Time, Temp 
2016-05-20 09:25,28 
2016-05-20 10:35,28.2 
2016-05-20 18:25,29 
2016-05-20 23:50,30 
2016-05-21 01:10,31 
2016-05-21 12:00,36 
2016-05-22 02:00,25 

Rのパッケージや機能に関するコメントやヒントに感謝します。御時間ありがとうございます。

+0

入力文字列か浮動小数点数はありますか? – jdweng

+0

申し訳ありませんが分かりません。時間について質問している場合、「09.25」は9時間25分、すなわち09:25を指します。 – MSNavin

+0

「時間」が実際にデータフレームでどのようにフォーマットされているかを質問しています。数値か文字列ですか?あなたの例では、 'Time'は' 09.25'と '02:00'の2通りの方法でリストされています。 'dput'を使ってデータサンプルを貼り付けるか、少なくとも' str(mydata) 'の出力を表示してください。また、あなたの例では、 'Time'には時刻だけが含まれています。日付はどこから来たのですか? – eipi10

答えて

1

ベースRでの可能な解決策:与え

df$Time <- as.POSIXct(strptime(paste('2016-05-20', sprintf('%05.2f',df$Time)), format = '%Y-%m-%d %H.%M', tz = 'GMT')) 
df$Time <- df$Time + cumsum(c(0,diff(df$Time)) < 0) * 86400 # 86400 = 60 * 60 * 24 

> df 
       Time Temp 
1 2016-05-20 09:25:00 28.0 
2 2016-05-20 10:35:00 28.2 
3 2016-05-20 18:25:00 29.0 
4 2016-05-20 23:50:00 30.0 
5 2016-05-21 01:10:00 31.0 
6 2016-05-21 12:00:00 36.0 
7 2016-05-22 02:00:00 25.0 

オフdata.table(との代替が、もちろんあなたもrleid & shiftの代わりにdiffcumsumを使用することができます):

それともdplyrと:両方が同じ結果が得られます

library(dplyr) 
df %>% 
    mutate(Time = as.POSIXct(strptime(paste('2016-05-20', 
              sprintf('%05.2f',Time)), 
            format = '%Y-%m-%d %H.%M', tz = 'GMT')) + 
      cumsum(c(0,diff(Time)) < 0)*86400) 


使用するデータ:

df <- read.table(text='Time, Temp 
09.25,28 
10.35,28.2 
18.25,29 
23.50,30 
01.10,31 
12.00,36 
02.00,25', header=TRUE, sep=',') 
1

は、あなたが(最初の測定を想定した新しい日が始まる時に検出し、いくつかのコードと組み合わせたカスタム日付形式を使用することができますが、最後の測定よりも早く日に行われます前日の)。

# starting day 
start_date = "2016-05-20" 

values=read.csv('values.txt', colClasses=c("character",NA)) 
last=c(0,values$Time[1:nrow(values)-1]) 
day=cumsum(values$Time<last) 

Time = strptime(paste(start_date,values$Time), "%Y-%m-%d %H.%M") 
Time = Time + day*86400 
values$Time = Time 
関連する問題