HH:MM:SS形式の「開始」と「終了」の 2 つの列のデータ フレームがあります。
difftime関数を使用して開始から終了までの期間を計算したかった
常にこのエラーが返されます: as.POSIXct.numeric(time1) のエラー: 'origin' を指定する必要があります
多くの投稿を読みましたが、どれもうまくいかないようでした。
パッケージの読み込み
library(dplyr)
library(tidyverse)
library(lubridate)
分と秒だけを扱うために時間を削除しました
get_time <- function(x){str_sub(x, start = -5) %>% ms()}
df <- df %>% mutate(start = get_time(start)) %>%
mutate(end = get_time(end))
オブジェクトのクラス
class(df$start)
gives:
[1] "Period"
attr(,"package")
[1] "lubridate"
start end
26M 22S 26M 23S
26M 25S 26M 37S
29M 47S 30M 13S
difftime関数を使用して期間を計算しました
df$duration <- with(df, difftime(end, start, units="secs"))
gives error:
Error in as.POSIXct.numeric(time1) : 'origin' must be supplied
減算演算子を使用しましたが、分が異なる3行目を除いて正常に機能し、間違った答えが返されました。
start end duration
26M 22S 26M 23S 1S
26M 25S 26M 37S 12S
29M 47S 30M 13S 1M -34S
修正
受け入れられた応答は、エラーを返すことを除いて、完全に正常に機能し ます。
私のDFからのサンプル
df <- structure(list(item = c("manatee", "manatee", "pile", "pile"), prestart = new("Period", .Data = c(22,
25, 41, 49), year = c(0, 0, 0, 0), month = c(0,
0, 0, 0), day = c(0, 0, 0, 0), hour = c(0, 0, 0,
0), minute = c(26, 26, 26, 26)), preend = new("Period",
.Data = c(23, 37, 48, 50), year = c(0, 0, 0, 0), month = c(0, 0, 0, 0), day = c(0, 0, 0, 0
), hour = c(0, 0, 0, 0), minute = c(26, 26, 26, 26)), poststart = new("Period", .Data = c(23, 41, 50,
54), year = c(0, 0, 0, 0), month = c(0, 0, 0, 0), day = c(0, 0, 0, 0), hour = c(0, 0, 0, 0),
minute = c(26, 26, 26, 26)), postend = new("Period",
.Data = c(37, 48, 52, 22), year = c(0, 0, 0, 0), month = c(0, 0, 0, 0), day = c(0, 0, 0, 0
), hour = c(0, 0, 0, 0), minute = c(26, 26, 26, 27))), row.names = c(NA, -6L), class = c("tbl_df", "tbl",
"data.frame"))
分と秒のみでデータを整理する (時間を削除する)
get_time <- function(x){str_sub(x, start = -5) %>% ms()}
df <- df %>% mutate(prestart = get_time(prestart)) %>%
mutate(preend = get_time(preend)) %>%
mutate(poststart = get_time(poststart)) %>%
mutate(postend = get_time(postend))