R 将两列合并为一个日期和时间列,并更改其格式

R 将两列合并为一个日期和时间列,并更改其格式,r,R,数据结构 str(noaaData) 我需要将日期和时间合并到一个名为“DateTime”的列中,方法是将它们更改为POSIXct格式“%Y-%m-%d%H:%m:%OS” 应该是这样的 2012-10-29 01:00:00 最小重复性 dput(noaaData) 我请求有人在这方面帮助我。这里有一种方法: noaaData <- data.frame( Date = c(20121029,20121029, 20121029, 20121029, 20121029, 201

数据结构

str(noaaData)
我需要将日期和时间合并到一个名为“DateTime”的列中,方法是将它们更改为POSIXct格式“%Y-%m-%d%H:%m:%OS”

应该是这样的

2012-10-29 01:00:00
最小重复性

dput(noaaData)
我请求有人在这方面帮助我。

这里有一种方法:

noaaData <- data.frame(
  Date = c(20121029,20121029, 20121029, 20121029, 20121029, 20121029, 20121029),
  Time = c(400, 500, 600, 700, 800, 900, 1000),
  stringsAsFactors = FALSE
)
strptime(
  paste(noaaData$Date, formatC(noaaData$Time, width = 4, format = "d", flag = "0")), 
  format = "%Y%m%d %H%M"
)
[1] "2012-10-29 04:00:00 CET" "2012-10-29 05:00:00 CET" "2012-10-29 06:00:00 CET" "2012-10-29 07:00:00 CET" "2012-10-29 08:00:00 CET"
[6] "2012-10-29 09:00:00 CET" "2012-10-29 10:00:00 CET"

noadata可能有更清洁的解决方案,但这应该有效且灵活

1.最小可复制示例:

df <- data.frame(Date = c(20121029,20121029, 20121029, 20121029, 20121029, 20121029, 20121029),
                 Time = c(400, 500, 600, 700, 800, 900, 1000),
                 stringsAsFactors = FALSE)

'data.frame':   7 obs. of  2 variables:
$ Date         : int  20121029 20121029 20121029 20121029 20121029 20121029 20121029
$ Time         : int  400 500 600 700 800 900 1000 
leftPad
可用于格式化
strtime
Time
(我们可以使用
tz
参数更改时区

strptime(paste0(df$Date, " ", leftPad(df$Time)), format = "%Y%m%d %H%M", tz="UTC")
这将返回:

[1] "2012-10-29 04:00:00 UTC" "2012-10-29 05:00:00 UTC"
[3] "2012-10-29 06:00:00 UTC" "2012-10-29 07:00:00 UTC"
[5] "2012-10-29 08:00:00 UTC" "2012-10-29 09:00:00 UTC"
[7] "2012-10-29 10:00:00 UTC"

嗨,Shashank Shekhar。请添加一个。同时显示您已经尝试过的。这样您可以帮助他人帮助您!@Edward,您可以帮助我吗?@PKumar,您可以帮助我吗?@dario我已经添加了put,您可以想清楚如何继续吗?在
Noadata
str
输出中,变量
time
是of type
int
但是在dput ouptu中它是
POSIXct
?也许你发布了错误的dput?谢谢你的帮助,但是我在这里看到了一个问题,时间=100意味着1:00:00,所以200意味着2:00:00,解决方案是00:01:40。你能检查一下吗?改进了。请检查最好的答案你的代码与我的wo更相关rk。谢谢你在这个问题上帮助我。谢谢你的帮助。你的代码工作正常,很高兴你的帮助。
leftPad <- function(x) {
  len <- 4
  s <- sapply(sapply(x, function(y) paste0("0000", y)),
    function(z) substr(z, nchar(z) - len + 1, nchar(z)))

  return(as.character(s))
}
strptime(paste0(df$Date, " ", leftPad(df$Time)), format = "%Y%m%d %H%M", tz="UTC")
[1] "2012-10-29 04:00:00 UTC" "2012-10-29 05:00:00 UTC"
[3] "2012-10-29 06:00:00 UTC" "2012-10-29 07:00:00 UTC"
[5] "2012-10-29 08:00:00 UTC" "2012-10-29 09:00:00 UTC"
[7] "2012-10-29 10:00:00 UTC"