1

データセットを週ごとに集計できるように、2 つの時間変数 "Interaction2" と "Start2" を週形式に変換しました。「Interaction2」と「Start2」の差である 3 番目の変数「Weeks」を作成します。次のコマンドを使用して、時間変数を (年、月、日ではなく) 年、月、週の標準の日付形式に変換しました。

d1$Interaction2<-format(d1$Interaction,'%Y-%m-%U')
d1$Start2<-format(d1$Start,'%Y-%m-%U')

「Interaction2」と「Start2」の結果は正しくフォーマットされているように見えますが、文字変数です。差分を取得するために difftime 関数を使用しましたが、結果は 10 進数です。

d1$Weeks<-difftime(d1$Interaction2,d1$Start2,units='weeks')

結果は整数であるべきではありませんか? difftime コマンドは、最後の 2 桁を週ではなく日として解釈していますか? 「Interaction2」週と「Start2」週の差を週数として取得するにはどうすればよいですか?

structure(list(Interaction2 = c("2015-02-06", "2015-02-08", "2015-03-09", 
"2015-03-11", "2015-03-12"), Start2 = c("1995-04-16", "1995-04-16", 
"1995-04-16", "1995-04-16", "1995-04-16"), Weeks = structure(c(1033.72023809524, 
1034.00595238095, 1038.14285714286, 1038.42857142857, 1038.57142857143
), units = "weeks", class = "difftime")), .Names = c("Interaction2", 
"Start2", "Weeks"), row.names = c(NA, 5L), class = "data.frame")

また、差分コマンドを実行する前に、strptime を使用して文字変数を変​​換しようとしました。

d1$Interaction3<-strptime(as.character(d1$Interaction2),"%Y%m%U")
d1$Start3<-strptime(as.character(d1$Start2),"%Y%m%U")
d1$Weeks<-difftime(d1$Interaction3,d1$Start3,units='weeks')

しかし、これにより、「Interaction3」、「Start3」、および「Weeks」変数の NA が得られました。

structure(list(Interaction2 = c("2015-02-06", "2015-02-08", "2015-03-09", 
"2015-03-11", "2015-03-12"), Start2 = c("1995-04-16", "1995-04-16", 
"1995-04-16", "1995-04-16", "1995-04-16"), Weeks = structure(c(NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_), units = "weeks", class = "difftime"), 
Start3 = structure(list(sec = c(NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_), min = c(NA_integer_, NA_integer_, NA_integer_, 
NA_integer_, NA_integer_), hour = c(NA_integer_, NA_integer_, 
NA_integer_, NA_integer_, NA_integer_), mday = c(NA_integer_, 
NA_integer_, NA_integer_, NA_integer_, NA_integer_), mon = c(NA_integer_, 
NA_integer_, NA_integer_, NA_integer_, NA_integer_), year = c(NA_integer_, 
NA_integer_, NA_integer_, NA_integer_, NA_integer_), wday = c(NA_integer_, 
NA_integer_, NA_integer_, NA_integer_, NA_integer_), yday = c(NA_integer_, 
NA_integer_, NA_integer_, NA_integer_, NA_integer_), isdst = c(-1L, 
-1L, -1L, -1L, -1L), zone = c("", "", "", "", ""), gmtoff = c(NA_integer_, 
NA_integer_, NA_integer_, NA_integer_, NA_integer_)), .Names = c("sec", 
"min", "hour", "mday", "mon", "year", "wday", "yday", "isdst", 
"zone", "gmtoff"), class = c("POSIXlt", "POSIXt")), Interaction3 = structure(list(
sec = c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_
), min = c(NA_integer_, NA_integer_, NA_integer_, NA_integer_, 
NA_integer_), hour = c(NA_integer_, NA_integer_, NA_integer_, 
NA_integer_, NA_integer_), mday = c(NA_integer_, NA_integer_, 
NA_integer_, NA_integer_, NA_integer_), mon = c(NA_integer_, 
NA_integer_, NA_integer_, NA_integer_, NA_integer_), 
year = c(NA_integer_, NA_integer_, NA_integer_, NA_integer_, 
NA_integer_), wday = c(NA_integer_, NA_integer_, NA_integer_, 
NA_integer_, NA_integer_), yday = c(NA_integer_, NA_integer_, 
NA_integer_, NA_integer_, NA_integer_), isdst = c(-1L, 
-1L, -1L, -1L, -1L), zone = c("", "", "", "", ""), gmtoff = c(NA_integer_, 
NA_integer_, NA_integer_, NA_integer_, NA_integer_)), .Names = c("sec", 
"min", "hour", "mday", "mon", "year", "wday", "yday", "isdst", 
"zone", "gmtoff"), class = c("POSIXlt", "POSIXt"))), .Names = c("Interaction2", 
"Start2", "Weeks", "Start3", "Interaction3"), row.names = c(NA, 
5L), class = "data.frame")
4

1 に答える 1

1

これを試してください(単位パラメーターを追加します)。これは、文字変数を暗黙的に数値変数(POSIXct)に強制し、数値の差を取るdifftimeに依存します。

> difftime( mydf$Interaction2,mydf$Start2, units="weeks")
Time differences in weeks
[1] 1033.720 1034.006 1038.143 1038.429 1038.571
于 2015-06-07T22:32:23.073 に答える