标签: posixct

“ct”和“lt”(在 POSIXct 和 POSIXlt 中)是什么意思?

我很感兴趣,“ct”和“lt”(在 POSIXct 和 POSIXlt 中)是什么意思。它们是某种缩写吗?例如,“ct”是否表示“日历时间”和“lt”其他意思?

posixct posixlt

8
推荐指数
1
解决办法
1959
查看次数

在POSIXct的向量上使用sapply

我有一个可能是一个非常简单的问题.我想从数据帧处理一列POSIXct对象并生成一个datetime字符串向量.我尝试使用以下sapply调用

dt <- sapply(df$datetime, function(x) format(x,"%Y-%m-%dT%H:%M:%S"))
Run Code Online (Sandbox Code Playgroud)

但无济于事.我一直收到以下错误:

> Error in prettyNum(.Internal(format(x, trim, digits, nsmall, width, 3L,  :
invalid 'trim' argument
Run Code Online (Sandbox Code Playgroud)

当我将此函数应用于列中的单个POSIXct对象时,我没有问题.关于问题是什么,我现在很难过.我是否需要对POSIXct对象做一些特别的事情?

r posixct sapply

7
推荐指数
1
解决办法
2880
查看次数

R从半标准字符串中提取时间分量

建立

我有一列持续时间存储为数据帧中的字符串.我想将它们转换为适当的时间对象,可能是POSIXlt.使用此方法很容易解析大多数字符串:

> data <- data.frame(time.string = c(
+   "1 d 2 h 3 m 4 s",
+   "10 d 20 h 30 m 40 s",
+   "--"))
> data$time.span <- strptime(data$time.string, "%j d %H h %M m %S s")
> data$time.span
[1] "2012-01-01 02:03:04" "2012-01-10 20:30:40" NA
Run Code Online (Sandbox Code Playgroud)

缺少的持续时间被编码"--"并需要转换为NA- 这已经发生但应该保留.

挑战在于字符串会丢弃零值元素.因此,期望的值2012-01-01 02:00:14将是字符串"1 d 2 h 14 s".但是这个字符串NA用简单的解析器解析:

> data2 <- data.frame(time.string = c(
+ …
Run Code Online (Sandbox Code Playgroud)

string time r posixct

7
推荐指数
1
解决办法
631
查看次数

通过R中的ROracle从Oracle查询获取正确的日期时间

我在R中使用ROracle访问Oracle数据库。

我注意到,大概是从夏季更改以来,任何DATE(日期时间)Oracle列现在都被错误地转换了(R中的小时数比Oracle DB中的小时数少)。

从小插图的第12页(我几乎不了解),它看起来像ROracle和R交换日期时间为自UTC 1970年1月1日以来的秒数,并且R随后针对本地时区进行了调整。

这是我的工作

    drv <- dbDriver("Oracle");
    con <- dbConnect(drv, username = Login, password = Pwd, dbname = DB, prefetch=TRUE, bulk_read=1e6);

    test.query <- "SELECT * FROM MYTABLE WHERE ( A > to_date('2008-03-03 12:30:00', 'YYYY-MM-DD HH24:MI:SS') AND A < to_date('2008-03-03 12:40:00','YYYY-MM-DD HH24:MI:SS')  AND [other stuff])"

    test <- dbGetQuery(con, test.query);

    head(test[,c("A","B","C")])
    #                    A                   B                   C
    #1 2008-03-03 11:30:38 2008-03-02 23:00:00 2008-03-02 23:00:00 #HERE IT SHOULD BE +1 HOUR
    #2 2008-03-03 11:30:38 2008-03-02 …
Run Code Online (Sandbox Code Playgroud)

oracle timezone r posixct

7
推荐指数
1
解决办法
1900
查看次数

在使用RPostgreSQL提取数据时,是否有一种特定的方法来处理R中的时间戳列?

我正在尝试从PostgreSQL数据库中提取数据,并且时间戳字段的结果不一致.我不确定我是否正确处理POSIXct结果.否则,我想我在RPostgreSQL包中发现了一个错误.以下是复制问题的方法:

假设postgres数据库中有一个表有一个字段(在PostgreSQL中运行):

CREATE DATABASE mydb;
CREATE TABLE test_table
(   
  "DateTime" timestamp without time zone NOT NULL,
  CONSTRAINT "pk_test_table" PRIMARY KEY ("DateTime")
)
WITH (
  OIDS=FALSE
);
ALTER TABLE test_table
  OWNER TO postgres;
Run Code Online (Sandbox Code Playgroud)

让我们说有几百条记录.我将在R中填充它们.这是代码:

library(RPostgreSQL)

# Let's feed the table with some sequence of date/time values
date_values <-  as.chron(seq(10000, 10500, 1/24))

format.chron <- function(z)  {
  sprintf("%04.0f-%02.0f-%02.0f %02.0f:%02.0f:00", 
            as.numeric(as.character(years(z))), 
            months(z), 
            as.numeric(as.character(days(z))), 
            as.numeric(as.character(hours(z))), 
            as.numeric(as.character(minutes(z))))
}

.generateInsertQuery <- function(date_values, field_name, table_name) {
  insert_val  <- paste(paste0("(", sQuote(format(date_values)), ")"), collapse=',')
  qry         <- paste("INSERT INTO", dQuote(table_name), paste0("(", …
Run Code Online (Sandbox Code Playgroud)

r posixct rpostgresql

7
推荐指数
2
解决办法
2715
查看次数

提高data.table日期+粘贴时间的性能?

我不确定我可以在这里提出这个问题,让我知道我是否应该在其他地方这样做.

我有一个data.table,其中包含1e6行,具有以下结构:

        V1       V2     V3
1: 03/09/2011 08:05:40 1145.0
2: 03/09/2011 08:06:01 1207.3
3: 03/09/2011 08:06:17 1198.8
4: 03/09/2011 08:06:20 1158.4
5: 03/09/2011 08:06:40 1112.2
6: 03/09/2011 08:06:59 1199.3
Run Code Online (Sandbox Code Playgroud)

我正在使用以下代码将V1和V2变量转换为唯一的datetime变量:

 system.time(DT[,`:=`(index= as.POSIXct(paste(V1,V2),
                         format='%d/%m/%Y %H:%M:%S'),
                     V1=NULL,V2=NULL)])

   user  system elapsed 
   47.47    0.16   50.27 
Run Code Online (Sandbox Code Playgroud)

有没有什么方法可以改善这种转变的表现?

这里dput(head(DT)):

DT <- structure(list(V1 = c("03/09/2011", "03/09/2011", "03/09/2011", 
"03/09/2011", "03/09/2011", "03/09/2011"), V2 = c("08:05:40", 
"08:06:01", "08:06:17", "08:06:20", "08:06:40", "08:06:59"), 
    V3 = c(1145, 1207.3, 1198.8, 1158.4, 1112.2, 1199.3)), .Names = c("V1", 
"V2", "V3"), class = c("data.table", "data.frame"), …
Run Code Online (Sandbox Code Playgroud)

performance r posixct data.table

7
推荐指数
1
解决办法
1023
查看次数

melt.data.frame()更改POSIXct列的打印方式

将数据帧融合到整个范围会更改"时间"(类POSIXct)列的打印方式.

t.wide <- data.frame(product=letters[1:5], 
                     result=c(2, 4, 0, 0, 1), 
                     t1=as.POSIXct("2014-05-26") + seq(0, 10800, length.out=5),
                     t2=as.POSIXct("2014-05-27") + seq(0, 10800, length.out=5),
                     t3=as.POSIXct("2014-05-28") + seq(0, 10800, length.out=5))

library(reshape2)     
t.long <- melt(t.wide, measure.vars=c("t1", "t2", "t3"), value.name="time")
t.long$time
 [1] 1401055200 1401057900 1401060600 1401063300 1401066000 1401141600 1401144300
 [8] 1401147000 1401149700 1401152400 1401228000 1401230700 1401233400 1401236100
[15] 1401238800
attr(,"class")
[1] "POSIXct" "POSIXt" 
Run Code Online (Sandbox Code Playgroud)

奇怪的是,如果print()显式调用,则按预期打印对象(时间戳,而不是它们的数字表示).

print(t.long$time)
 [1] "2014-05-26 00:00:00 CEST" "2014-05-26 00:45:00 CEST" "2014-05-26 01:30:00 CEST"
 [4] "2014-05-26 02:15:00 CEST" "2014-05-26 03:00:00 CEST" "2014-05-27 00:00:00 CEST"
 [7] …
Run Code Online (Sandbox Code Playgroud)

r posixct reshape2

7
推荐指数
1
解决办法
627
查看次数

R包从日期和小时构建时间对象(整数)

我以日期形式提供数据(格式"YYYY-MM-DD",例如"2015-03-11",以及当天的小时数(0-23).

生成表单的时间对象最方便的方法是什么

"2015-03-11" and hour = 0 ->  "2015-03-11 00:00"
"2015-03-11" and hour = 1 ->  "2015-03-11 01:00"
"2015-03-11" and hour = 2 ->  "2015-03-11 02:00"
Run Code Online (Sandbox Code Playgroud)

我可以使用Base中的Date函数或来自xts或timeDate的函数.应该很容易,但我相信那里的人很快就会知道.

编辑:数据以2列提供,一列用于日期,一列用数字.

datetime r date-conversion posixct

7
推荐指数
2
解决办法
107
查看次数

在posix时间添加一年

我有一个像"2016-01-01"(YYYY-MM-DD)的日期,我正在as.numeric(as.POSIXct(...))使用它作为整数.

我的问题是,有没有办法在一年,一个月或一天中添加到这个日期?我的意思是,如果我在2016年增加一年,它将与2015年增加一年(bissextile stuff)相同.

与在1月1日添加32天相同,与在2月01日添加32天相同(因为可能更改的天数)

我设法把东西了年和月的作品,但我想实现以及

how_long_is_simul <- function(lst){
    # Format DATE_START
    greg_date = intDate_to_gregorianDate(DATE_START)
    reg = "^([0-9]{4})\\-([0-9]{2})\\-([0-9]{2})$" # black-magic
    splited_date = str_match(greg_date, reg)

    # Manage months limit
    lst$years = lst$years + floor(lst$months/12)
    lst$months = lst$months%%12

    # Build new date
    my_vector = c(lst$years, lst$months, 0)
    end_date = paste(as.numeric(splited_date[2:4]) + my_vector, collapse = "-")
    return(round((gregorianDate_to_intDate(end_date)-DATE_START)/86400))
}

# AND the vars used by the function
DATE_START <- 1451606400 # 2016-01-01 GMT
lst   = list( # no days, …
Run Code Online (Sandbox Code Playgroud)

r date posixct

7
推荐指数
1
解决办法
6580
查看次数

R表示NA,尽管存在值

我有两列PosixLT时间没有NA值,但NA值会在检查时显示

> sum(is.na(check$start))
[1] 19 
> sum(is.na(check$end))
[1] 23
Run Code Online (Sandbox Code Playgroud)

数据存在于单元格中,为什么会发生这种情况呢?我听说PosixLT会发生这种情况,但即使我将其转换为posixCT,也会有非常奇怪的行为.如何解决这个问题呢?

> as.POSIXct(check$start, format = "%Y-%m-%d %H:%M:%S", tz = "CST6CDT")
 [1] NA                        "2014-03-09 01:35:01 CST" NA                        "2014-03-09 01:53:30 CST" NA                       
 [6] NA                        NA                        NA                        NA                        "2014-03-09 04:17:11 CDT"
[11] NA                        NA                        "2015-03-08 01:54:43 CST" NA                        NA                       
[16] NA                        NA                        NA                        NA                        NA                       
[21] NA                        NA                        NA  


> dput(check)
structure(list(start = structure(list(sec = c(24, 1, 27, 30, 
8, 21, 40, 9, 43, 11, 31, 43, 43, 55, 39, 54, 41, 19, 2, …
Run Code Online (Sandbox Code Playgroud)

datetime r posixct

7
推荐指数
1
解决办法
388
查看次数