在 R 中使用 strptime 获取正确日期时出错
error in getting the correct date using strptime in R
我正在使用 strptime
来提取日期,结果是错误的年份
下面代码哪里出错了:
strptime('8/29/2013 14:13', "%m/%d/%y")
[1] "2020-08-29 PDT"
还有哪些其他方法可以将日期和时间提取为单独的列。
我拥有的数据采用这种格式 - 8/29/2013 14:13
我想把它分成两列,一列是 8/29/2013
另一列是 14:13
.
你有一个四位数的年份所以你需要使用 %Y
strptime('8/29/2013 14:13', "%m/%d/%Y" )
[1] "2013-08-29 CEST"
您真的要将数据和时间放在不同的列中吗?通常处理单个日期时间对象要容易得多。
这是一种将时间和日期与字符串分开的可能性。
为方便起见,我们可以先将字符串转换为 POSIX 对象:
datetime <- '8/29/2013 14:13'
datetime.P <- as.POSIXct(datetime, format='%m/%d/%Y %H:%M')
然后我们可以使用as.Date()
从此对象中提取日期并使用format()
以所需格式显示它:
format(as.Date(datetime.P),"%m/%d/%Y")
#[1] "08/29/2013"
要单独存储时间,我们可以使用,例如 strftime()
函数:
strftime(datetime.P, '%H:%M')
#[1] "14:13"
最后一个函数 (strftime()
) 没有向量化,这意味着如果我们处理一个向量 datetime
包含几个字符串,日期和时间的格式如 OP 中所述, 它应该被包装成一个像 sapply()
这样的循环来从每个字符串中提取时间。
例子
datetime <- c('8/29/2013 14:13', '9/15/2014 12:03')
datetime.P <- as.POSIXct(datetime, format='%m/%d/%Y %H:%M')
format(as.Date(datetime.P),"%m/%d/%Y")
#[1] "08/29/2013" "09/15/2014"
sapply(datetime.P, strftime, '%H:%M')
#[1] "14:13" "12:03"
希望这对您有所帮助。
我正在使用 strptime
来提取日期,结果是错误的年份
下面代码哪里出错了:
strptime('8/29/2013 14:13', "%m/%d/%y")
[1] "2020-08-29 PDT"
还有哪些其他方法可以将日期和时间提取为单独的列。
我拥有的数据采用这种格式 - 8/29/2013 14:13
我想把它分成两列,一列是 8/29/2013
另一列是 14:13
.
你有一个四位数的年份所以你需要使用 %Y
strptime('8/29/2013 14:13', "%m/%d/%Y" )
[1] "2013-08-29 CEST"
您真的要将数据和时间放在不同的列中吗?通常处理单个日期时间对象要容易得多。
这是一种将时间和日期与字符串分开的可能性。
为方便起见,我们可以先将字符串转换为 POSIX 对象:
datetime <- '8/29/2013 14:13'
datetime.P <- as.POSIXct(datetime, format='%m/%d/%Y %H:%M')
然后我们可以使用as.Date()
从此对象中提取日期并使用format()
以所需格式显示它:
format(as.Date(datetime.P),"%m/%d/%Y")
#[1] "08/29/2013"
要单独存储时间,我们可以使用,例如 strftime()
函数:
strftime(datetime.P, '%H:%M')
#[1] "14:13"
最后一个函数 (strftime()
) 没有向量化,这意味着如果我们处理一个向量 datetime
包含几个字符串,日期和时间的格式如 OP 中所述, 它应该被包装成一个像 sapply()
这样的循环来从每个字符串中提取时间。
例子
datetime <- c('8/29/2013 14:13', '9/15/2014 12:03')
datetime.P <- as.POSIXct(datetime, format='%m/%d/%Y %H:%M')
format(as.Date(datetime.P),"%m/%d/%Y")
#[1] "08/29/2013" "09/15/2014"
sapply(datetime.P, strftime, '%H:%M')
#[1] "14:13" "12:03"
希望这对您有所帮助。