2017-08-19 3 views
0

私は時間フォーマットのデータフレームを持っています。私は数値データに変更する必要があります。 次の形式を使用しましたが、値が数値形式で変更されているため、正しいかどうかわかりません。時間データフレームを数値データに変換する

Photoperiod 
08:52:41 
08:53:35 
08:54:33 
08:55:36 
08:56:44 
08:57:55 
08:59:11 
09:00:31 
09:01:55 
09:03:23 
09:04:55 
09:06:31 
09:08:10 
09:09:53 
09:11:40 

DF<- read.csv2(file="DF.csv") 
DF.a <-as.POSIXct(DF, format = "%H:%M:%S") 

library(data.table) 

DF.B<- lapply(DF.a , function(x) as.numeric(as.ITime(x))/3600) 
+1

問題はどこですか?最初の2時間は1分の差があります。これは1/60〜0.016です。最初の2回の違いを見ると、0.015です。 –

+1

あなたはどんな値を見ましたか?関数as.numeric(as.ITime(x))/ 3600は時間数(最大24)の時間を与えます。たとえば、as.numeric(as.ITime( "12:00:00"))/ 3600'は12を返します。as.numeric(as.ITime( "23:59:59"))/ 3600 'は23.99972を返します。 –

+0

私のデータフレームは昼光データなので、14:25:30は14時間25分の昼光を意味します。as.numeric(as.ITime(x))/ 3600を使用するかどうかは分かりません。ちょうど混乱してください。 – Mori

答えて

2

Aは、(非常に)似た質問がSO in portugueseで昨日頼まれました。 Marcus Nunesの答えは、あなたが望むものを与えるかもしれません。

彼は関数HoraDecimalをポルトガル語の 'DecimalHour'と呼びます。

HoraDecimal <- function(x){ 
    sum(unlist(lapply(strsplit(x, split=":"), as.numeric)) * c(1, 1/60, 1/3600)) 
} 

x <- "02:20:00" 
HoraDecimal(x) 
[1] 2.333333 

y <- "00:50:00" 
HoraDecimal(y) 
[1] 0.8333333 

z <- "3:30:30" 
HoraDecimal(z) 
[1] 3.508333 

私はsapplyの代わりunlist(lapply(...))使用するように、コメント欄での提案を行いました。以下はそのようなバージョンです。名前が英語に変更されました。

DecimalHour <- function(x){ 
    sum(sapply(strsplit(x, split=":"), as.numeric) * c(1, 1/60, 1/3600)) 
} 

DecimalHour(x) 
DecimalHour(y) 
DecimalHour(z) 

変換方法は同じですが、それでもMarcusの機能です。有用であると分かった場合、そのクレジットは彼に送られます。

+0

'%*% 'はここで動作しません – akrun

+0

@akrun行列乗算は'行列 'を返します。私はそれがOPが望んでいるとは思わない。 –

関連する問題