質問
Posixct形式で因子を変換してからdatetime形式を適用した後、2pos1とpos2の間のdatetimeの差を取りたいと思います。
しかし、特定の項目に対してそれを行うと、コンソールで正しい答えが得られますが、全体のセットで操作を行うと、コンソールは数字だけを出力し、dateframeには
違いを取ろうとしているときに、dataframeで時間を取得するにはどうすればよいですか?私はlubridateパッケージを使用していますが、そうする機能はありますか?
これを説明するRStudioのデータのコード/画像の例を次に示します
CR_Date <- data.frame(
pos1="2014-07-01 00:00:00",
pos2=c("2014-07-01 00:00:00","2014-07-01 10:15:00")
)
CR_Date[] <- lapply(CR_Date,as.POSIXct)
CR_Date
# pos1 pos2
#1 2014-07-01 2014-07-01 00:00:00
#2 2014-07-01 2014-07-01 10:15:00
CR_Date$pos2[2] - CR_Date$pos1[2]
#Time difference of 10.25 hours
CR_Date$hours <- CR_Date$pos2 - CR_Date$pos1
解決
最初に、これは潤滑剤とは関係ありません。
第二に、RSTUDIOはディスプレイウィンドウ内の変数の印刷にねじ込まれて留めておきます。コマンドラインウィンドウにCR_Date$hours
を入力すると、プリントが表示されます
#Time differences in secs
#[1] 0 36900
.
とhead(CR_Date)
は次のようになります:
# pos1 pos2 hours
#1 2014-07-01 2014-07-01 00:00:00 0 secs
#2 2014-07-01 2014-07-01 10:15:00 36900 secs
.
どちらのどちらが表示しているかに関してあなたを倒したでしょう。
@ vickorpが提案すると、difftime
はこれを解決する方法です。
CR_Date$hours <- with(CR_Date, difftime(pos2,pos1,units="hours") )
CR_Date
# pos1 pos2 hours
#1 2014-07-01 2014-07-01 00:00:00 0.00 hours
#2 2014-07-01 2014-07-01 10:15:00 10.25 hours
. 他のヒント
"を使用することもできます。as.double
メソッド"とその units
引数(参照 ?diffime
):
as.double
メソッド[as.double(x, units = "auto", ...)
]指定された単位で表現された数値を返します
...ここで x
は
クラスから継承するオブジェクト
"difftime"
あなたの例に適用されます pos2 - pos1
になります。 difftime
オブジェクト:
CR_Date$hours <- as.double(CR_Date$pos2 - CR_Date$pos1, units = "hours")
CR_Date
# pos1 pos2 hours
#1 2014-07-01 2014-07-01 00:00:00 0.00
#2 2014-07-01 2014-07-01 10:15:00 10.25
またはその他 units
:
as.double(CR_Date$pos2 - CR_Date$pos1, units = "mins")
#[1] 0 615
as.double(CR_Date$pos2 - CR_Date$pos1, units = "days")
#[1] 0.0000000 0.4270833
所属していません StackOverflow