我需要在动物园对象的索引上使用 as.Date。一些日期在 BST 中,因此在转换时,我(仅)在这些条目上损失了一天。我根本不关心一小时的差异,甚至不关心日期的时间部分,我只想确保显示的日期保持不变。我猜这不是很难,但我无法做到。有人可以帮忙吗?
class(xtsRet)
#[1] "xts" "zoo"
index(xtsRet)
#[1] "2007-07-31 BST" "2007-08-31 BST" "2007-09-30 BST" "2007-10-31 GMT"
class(index(xtsRet))
#[1] "POSIXt" "POSIXct"
index(xtsRet) <- as.Date(index(xtsRet))
index(xtsRet)
#[1] "2007-07-30" "2007-08-30" "2007-09-29" "2007-10-31"
Run Code Online (Sandbox Code Playgroud)
最小可重复的示例(不需要zoo包装):
my_date <- as.POSIXct("2007-04-01") # Users in non-UK timezone will need to
# do as.POSIXct("2007-04-01", "Europe/London")
my_date
#[1] "2017-04-01 BST"
as.Date(my_date)
#[1] "2017-03-31"
Run Code Online (Sandbox Code Playgroud) 我的类字符数据框中有一个local.time列,其中包含如下元素:
> a$local.time
[1] "1:30 AM" "6:29 AM" "6:59 AM" "9:54 AM" "10:14 AM" "10:34 AM" "12:54 PM" "1:15 PM" "1:20 PM"
[10] "1:20 PM" "2:15 PM" "2:15 PM" "4:23 AM" "6:28 AM" "2:45 PM" "3:08 PM" "3:23 PM" "3:58 PM"
Run Code Online (Sandbox Code Playgroud)
我想将它们从类字符转换为时间变量.所以我用过:
> as.POSIXct(a$local.time, tz = "", format = "%I:%M %p", usetz = FALSE)
Run Code Online (Sandbox Code Playgroud)
这导致:
[1] "2014-10-31 01:30:00 EDT" "2014-10-31 06:29:00 EDT" "2014-10-31 06:59:00 EDT" "2014-10-31 09:54:00 EDT"
[5] "2014-10-31 10:14:00 EDT" "2014-10-31 10:34:00 EDT" "2014-10-31 12:54:00 EDT" "2014-10-31 13:15:00 …Run Code Online (Sandbox Code Playgroud) 我有一个列表redDressTweets的statusES.status是一个有字段的类created.我正在尝试列出发布推文的时间列表.这是我试图这样做的方式
times <- unlist(lapply(redDressTweets, function(tweet) {tweet$created }))
Run Code Online (Sandbox Code Playgroud)
输出是数字向量:
[1] 1478044029 1477954062 1477909847 1477887746 1477832560 1477640940 1477640939
[8] 1477628031 1477540826
Run Code Online (Sandbox Code Playgroud)
但是这个类redDressTweets[[1]]$created是"POSIXct" "POSIXt".
为什么会发生这种情况?如何阻止它将POSIXct转换为数字?
我有一个工具可以以不规则的时间格式导出数据。我需要将date和time向量组合成datetime以下POSIXct格式的新向量:%Y-%m-%d %H:%M:%S. 出于好奇,我试图做到这一点在三种不同的方式,使用as.POSIXct(),strftime()和strptime()。使用下面的示例数据时,只有as.POSIXct()和strftime()函数有效,但我很好奇为什么strptime()会产生NAs? 另外,我无法使用...将strftime()输出转换为POSIXct对象as.POSIXct()
在我的真实数据(其中我只为您提供第一个行)上尝试这些相同的函数时,我遇到了一个完全不同的问题。只有strftime()功能在工作。出于某种原因,该as.POSIXct()函数也在产生NAs,这是我实际需要将 mydatetime转换为POSIXct对象的唯一命令......
这些功能之间似乎存在细微差别,我想知道如何更有效地使用它们。谢谢!
可重现的例子:
## Creating dataframe:
date <- c("2017-04-14", "2017-04-14","2017-04-14","2017-04-14")
time <- c("14:24:24.992000","14:24:25.491000","14:24:26.005000","14:24:26.511000")
value <- c("4.106e-06","4.106e-06","4.106e-06","4.106e-06")
data <- data.frame(date, time)
data <- data.frame(data, value) ## I'm sure there is a better way …Run Code Online (Sandbox Code Playgroud) 使用此问题中的相同数据,在data.table v1.9.2中将日期时间舍入到第二个是一个问题.
require(data.table)
options(digits.secs=3) # usually placed in .Rprofile
DT <- data.table(timestamp=c(as.POSIXct("2013-01-01 17:51:00.707"),
as.POSIXct("2013-01-01 17:51:59.996"),
as.POSIXct("2013-01-01 17:52:00.059"),
as.POSIXct("2013-01-01 17:54:23.901"),
as.POSIXct("2013-01-01 17:54:23.914")))
DT
DT[ , round(timestamp)] # looks good
DT[ , timestamp_rounded := round(timestamp)] # does not work
DT[ , timestamp_rounded := round(timestamp, units="secs")] # does not work
DT
# timestamp timestamp_rounded
# 1: 2013-01-01 17:51:00.707 1,0,0,24,24
# 2: 2013-01-01 17:51:59.996 51,52,52,54,54
# 3: 2013-01-01 17:52:00.059 17,17,17,17,17
# 4: 2013-01-01 17:54:23.901 1,1,1,1,1
# 5: 2013-01-01 17:54:23.914 0,0,0,0,0
Run Code Online (Sandbox Code Playgroud)
我找到了一个解决方案lubridate …
我有一个df整数变量counts,和一个POSIXct datetime变量.datetime变量表示不同日期的分钟间隔:
counts datetime
246 02/11/2011 19:00
237 02/11/2011 19:01
268 02/11/2011 19:02
496 02/11/2011 19:03
259 02/11/2011 19:04
548 09/12/2011 20:14
Run Code Online (Sandbox Code Playgroud)
我希望每天都有一个线图,x轴上有不同的HH:MM.我可以通过以下方式获得日期,时间和分钟lubridate:
require(lubridate)
day(df$datetime)
minute(df$datetime)
Run Code Online (Sandbox Code Playgroud)
但我无法将它们组合在一起(我已尝试将日期时间转换为HH:MM字符的路线失败).我错过了下面的"x =因子(HH:日期时间的MM)".有什么想法评论?
ggplot(df, aes(x=factor(HH:MM of datetime), y=counts, group=day(datetime)) + geom_line()
Run Code Online (Sandbox Code Playgroud)
示例:每行应该是不同的一天.x轴应为HH:MM,y为计数.

数据:
structure(list(all = c(246, 237, 268, 496, 259, 294, 414, 290,
267, 375, 402, 355, 572, 319, 354, 612, 478, 327, 511, 500, 468,
565, 472, 524, 844, 442, 382, 515, 542, 390, 511, 759, 933, …Run Code Online (Sandbox Code Playgroud) 我有不同工作的"开始"和"结束"时间数据,按"所有者"分组:
Data <- data.frame(
job = c(1, 2, 3, 4, 5),
owner = c("name1", "name2", "name1", "name1", "name2"),
Start = as.POSIXct(c("2015-01-01 15:00:00", "2015-01-01 15:01:00", "2015-01-01 15:13:00", "2015-01-01 15:20:00", "2015-01-01 15:39:02"), format="%Y-%m-%d %H:%M:%S"),
End = as.POSIXct(c("2015-01-01 15:11:11", "2015-01-01 15:17:21", "2015-01-01 15:17:00", "2015-01-01 15:31:21", "2015-01-01 15:40:11"), format="%Y-%m-%d %H:%M:%S")
)
Run Code Online (Sandbox Code Playgroud)
对于每个所有者,我想计算每个所有者的作业之间的空闲时间,即一个作业的"结束"时间与下一个作业的"开始"时间之间的差异.
如何使用difftime()不同列中的特定行和时间之间的时间差来计算?
结果应如下所示:
job, owner, idletime
1, name1, NA
2, name2, NA
3, name1, 1.816667 # End of row 1 minus Start of row 3
4, name1, 3.0 # End of …Run Code Online (Sandbox Code Playgroud) 当我在R 3.1.2中创建给定POSIXct向量的矩阵时,矩阵的条目是数字而不是POSIXct:
x <- as.POSIXct("2012-02-25 19:00:00")
x
attributes(x)
m <- matrix(x, nrow=2, ncol=3)
m
attributes(m)
Run Code Online (Sandbox Code Playgroud)
创建POSIXct值矩阵的最佳方法是什么?
我想从POSIXctR中提取小时,但检索2位数的答案.
例如,
test=as.POSIXct("2015-03-02 03:15:00")
test
[1] "2015-01-02 03:15:00 GMT"
month(testing)
[1] 1
hour(testing)
[1] 3
Run Code Online (Sandbox Code Playgroud)
结果给出相关的月份和小时,但我希望看到01和03,而不是仅仅1和3.
我有两个R表,每个表都有一个用户列表和一个时间戳,对应于他们采取某个操作的时间.
这些(df1)中的第一个表有一个详尽的用户列表,用户将有多个具有不同时间戳的行.
第二个(df2)将有一个更有限的用户列表,但用户将再次使用不同的时间戳在表中.
我希望能够做的是加入这两个表,最后得到一个与用户匹配的表和df1最接近的时间戳df2,只要时间戳df2发生在一个表之后df1.
例如,如果我有两个表,如:
df1 <- data.frame(c(1,1,2,3), as.POSIXct(c('2016-12-01 08:53:20', '2016-12-01 12:45:47', '2016-12-01 15:34:54', '2016-12-01 00:49:50')))
names(df1) <- c('user', 'time')
df2 <- data.frame(c(1,1,3), as.POSIXct(c('2016-12-01 07:11:01', '2016- 12-01 11:50:11', '2016-12-01 01:19:10')))
names(df2) <- c('user', 'time')
Run Code Online (Sandbox Code Playgroud)
给我们:
> df1
user time
1 1 2016-12-01 08:53:20
2 1 2016-12-01 12:45:47
3 2 2016-12-01 15:34:54
4 3 2016-12-01 00:49:50
> df2
user time
1 1 2016-12-01 07:11:01
2 1 2016-12-01 …Run Code Online (Sandbox Code Playgroud)