difftime() 添加十进制数
difftime() adds decimal numbers
我正在尝试使用 difftime() 获取从特定日期算起的天数。如果我使用 11 月日期 (10.11.14) 它工作正常,如果我使用 9 月日期 (10.09.14) 它添加 .0417 到日期。知道我该如何解决这个问题吗?
head(dummydat)
reihe nummer bluh_datum
1 1 1 07.03.15
2 1 2 11.03.15
3 1 3 09.03.15
4 1 4 <NA>
5 1 5 <NA>
6 1 6 07.03.15
dummydat <- cbind(dummydat,"days"=as.numeric(difftime(strptime(dummydat$bluh_datum, format="%d.%m.%y"),strptime("10.11.14", format="%d.%m.%y"), units="days")))
> head(dummydat)
reihe nummer bluh_datum days
1 1 1 07.03.15 117
2 1 2 11.03.15 121
3 1 3 09.03.15 119
4 1 4 <NA> NA
5 1 5 <NA> NA
6 1 6 07.03.15 117
> dummydat <- cbind(dummydat,"days"=as.numeric(difftime(strptime(dummydat$bluh_datum, format="%d.%m.%y"),strptime("10.09.14", format="%d.%m.%y"), units="days")))
> head(dummydat)
reihe nummer bluh_datum days days
1 1 1 07.03.15 117 178.0417
2 1 2 11.03.15 121 182.0417
3 1 3 09.03.15 119 180.0417
4 1 4 <NA> NA NA
5 1 5 <NA> NA NA
6 1 6 07.03.15 117 178.0417
而不是 strptime
你可以像这样使用 as.Date
difftime(as.Date(dummydat$bluh_datum, format = "%d.%m.%y"), as.Date("10.11.14", format = "%d.%m.%y"), units = "days")
# Time differences in days
# [1] 117 121 119 NA NA 117
difftime(as.Date(dummydat$bluh_datum, format = "%d.%m.%y"), as.Date("10.09.14", format = "%d.%m.%y"), units = "days" )
# Time differences in days
# [1] 178 182 180 NA NA 178
或者您必须像这样 tz="GMT"
指定时区
difftime(strptime(dummydat$bluh_datum, format="%d.%m.%y", tz = "GMT"), strptime("10.09.14", format="%d.%m.%y", tz = "GMT"), units="days")
# Time differences in days
# [1] 178 182 180 NA NA 178
difftime(strptime(dummydat$bluh_datum, format="%d.%m.%y", tz = "GMT"),strptime("10.11.14", format="%d.%m.%y", tz = "GMT"), units="days")
# Time differences in days
# [1] 117 121 119 NA NA 117
如果你不指定时区看看会发生什么
strptime(dummydat$bluh_datum, format="%d.%m.%y")
# [1] "2015-03-07 CET" "2015-03-11 CET" "2015-03-09 CET" NA NA "2015-03-07 CET"
strptime("10.09.14", format="%d.%m.%y")
## [1] "2014-09-10 CEST"
不同日期的时区会有所不同。
如果您不需要小数,请尝试 as.integer
而不是 as.numeric
。
c(as.numeric(difftime("2015-12-02", "2014-12-02")), as.numeric(difftime("2015-12-02", "2014-11-01")))
# [1] 365.0000 396.0417
c(as.integer(difftime("2015-12-02", "2014-12-02")), as.integer(difftime("2015-12-02", "2014-11-01")))
# [1] 365 396
我正在尝试使用 difftime() 获取从特定日期算起的天数。如果我使用 11 月日期 (10.11.14) 它工作正常,如果我使用 9 月日期 (10.09.14) 它添加 .0417 到日期。知道我该如何解决这个问题吗?
head(dummydat)
reihe nummer bluh_datum
1 1 1 07.03.15
2 1 2 11.03.15
3 1 3 09.03.15
4 1 4 <NA>
5 1 5 <NA>
6 1 6 07.03.15
dummydat <- cbind(dummydat,"days"=as.numeric(difftime(strptime(dummydat$bluh_datum, format="%d.%m.%y"),strptime("10.11.14", format="%d.%m.%y"), units="days")))
> head(dummydat)
reihe nummer bluh_datum days
1 1 1 07.03.15 117
2 1 2 11.03.15 121
3 1 3 09.03.15 119
4 1 4 <NA> NA
5 1 5 <NA> NA
6 1 6 07.03.15 117
> dummydat <- cbind(dummydat,"days"=as.numeric(difftime(strptime(dummydat$bluh_datum, format="%d.%m.%y"),strptime("10.09.14", format="%d.%m.%y"), units="days")))
> head(dummydat)
reihe nummer bluh_datum days days
1 1 1 07.03.15 117 178.0417
2 1 2 11.03.15 121 182.0417
3 1 3 09.03.15 119 180.0417
4 1 4 <NA> NA NA
5 1 5 <NA> NA NA
6 1 6 07.03.15 117 178.0417
而不是 strptime
你可以像这样使用 as.Date
difftime(as.Date(dummydat$bluh_datum, format = "%d.%m.%y"), as.Date("10.11.14", format = "%d.%m.%y"), units = "days")
# Time differences in days
# [1] 117 121 119 NA NA 117
difftime(as.Date(dummydat$bluh_datum, format = "%d.%m.%y"), as.Date("10.09.14", format = "%d.%m.%y"), units = "days" )
# Time differences in days
# [1] 178 182 180 NA NA 178
或者您必须像这样 tz="GMT"
指定时区
difftime(strptime(dummydat$bluh_datum, format="%d.%m.%y", tz = "GMT"), strptime("10.09.14", format="%d.%m.%y", tz = "GMT"), units="days")
# Time differences in days
# [1] 178 182 180 NA NA 178
difftime(strptime(dummydat$bluh_datum, format="%d.%m.%y", tz = "GMT"),strptime("10.11.14", format="%d.%m.%y", tz = "GMT"), units="days")
# Time differences in days
# [1] 117 121 119 NA NA 117
如果你不指定时区看看会发生什么
strptime(dummydat$bluh_datum, format="%d.%m.%y")
# [1] "2015-03-07 CET" "2015-03-11 CET" "2015-03-09 CET" NA NA "2015-03-07 CET"
strptime("10.09.14", format="%d.%m.%y")
## [1] "2014-09-10 CEST"
不同日期的时区会有所不同。
如果您不需要小数,请尝试 as.integer
而不是 as.numeric
。
c(as.numeric(difftime("2015-12-02", "2014-12-02")), as.numeric(difftime("2015-12-02", "2014-11-01")))
# [1] 365.0000 396.0417
c(as.integer(difftime("2015-12-02", "2014-12-02")), as.integer(difftime("2015-12-02", "2014-11-01")))
# [1] 365 396