我一直在尝试使用以下脚本将以下列转换为R中的yyyy - mm - dd
数据对象,但没有成功。
它会创建一个NA
列而不是它;也许是因为在每个值的开头和结尾都有单引号("'"
)。
我试图看起来像类似的帖子,但他们没有解决这个问题。
我该如何解决这个问题?
f8$Date
[1] "'2016-01-05 08:44:10'" "'2016-01-05 08:45:51'" "'2016-01-05 08:45:54'" "'2016-01-05 08:46:24'" "'2016-01-05 08:46:24'"
[6] "'2016-01-05 08:57:39'" "'2016-01-05 09:01:44'" "'2016-01-05 09:01:45'" "'2016-01-05 09:13:23'" "'2016-01-05 09:15:00'" ...
f8$Date <- as.Date(as.character(f8$Date), format = "%Y-%m-%d")
答案 0 :(得分:2)
尝试将初始引号放入您的格式中,以便format = "'%Y-%m-%d"
。 as.Date()
会忘记字符串的其余部分,因为日期就在'
之后。来自help(as.Date)
:
尽可能根据指定的格式处理字符串:忽略任何尾随字符。
所以我们有
as.Date("'2016-01-05 08:44:10'", format = "'%Y-%m-%d")
# [1] "2016-01-05"
答案 1 :(得分:2)
1)子串跳过前导'然后使用as.Date
:
as.Date(substring(dates, 2))
## [1] "2016-01-05" "2016-01-05" "2016-01-05" "2016-01-05" "2016-01-05"
## [6] "2016-01-05" "2016-01-05" "2016-01-05" "2016-01-05" "2016-01-05"
2)chartr 这也会起作用并给出相同的答案 - 它将每个单引号转换为空格然后应用as.Date
。
as.Date(chartr("'", " ", dates))
3)sub 这与(2)几乎相同,但使用sub
代替chartr
,只替换第一个',因为这已足够。它也用空字符串而不是空格替换它 - 要么工作。
as.Date(sub("'", "", dates))
4)扫描另一种方法是使用scan
,如下所示:
as.Date(scan(text = dates, what = "", quiet = TRUE))
注意:假设输入dates
为:
dates <- c("'2016-01-05 08:44:10'", "'2016-01-05 08:45:51'", "'2016-01-05 08:45:54'",
"'2016-01-05 08:46:24'", "'2016-01-05 08:46:24'", "'2016-01-05 08:57:39'",
"'2016-01-05 09:01:44'", "'2016-01-05 09:01:45'", "'2016-01-05 09:13:23'",
"'2016-01-05 09:15:00'")
答案 2 :(得分:0)
您使用的任何In-build功能必须包含您提供输入的格式。一种方法可以如下所示。我已经创建了一个数据表,但您也可以使用数据框。最重要的部分是as.POSIXct(strptime(Time,'%Y-%d-%m %H:%M:%S'))
- 如果您看到我们需要指定指定输入字符串的格式。
注意:双引号内的单引号没有意义,所以我已将其删除。
关于格式规范,您可以参考以下链接 - https://www.stat.berkeley.edu/~s133/dates.html
library(data.table)
Time=data.table(Time=c("2016-01-05 08:44:10","2016-01-05 08:45:51","2016-01-05 08:45:54","2016-01-05 08:46:24", "2016-01-05 08:46:24","2016-01-05 08:57:39","2016-01-05 09:01:44","2016-01-05 09:01:45","2016-01-05 09:13:23","2016-01-05 09:15:00"))
Time[,Time_updated:=as.POSIXct(strptime(Time,'%Y-%d-%m %H:%M:%S'))]