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 typeint
但是在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"