r - R错误中的格式化时间
问题描述
我的with value中有一个Time
列。我想要它没有秒数,因此使用了. 但我得到了 NA 值。这里有什么问题?df
1.01.2016 0:00:05
df$Time <- as.POSIXct(df$Time, format = "%d.%m.%Y :%H:%M", tz = "Asia/Kolkata")
解决方案
我怀疑这里有两件事在起作用:时间对象 ( POSIXt
) 的存储和该对象的表示。
您提供的字符串(我相信)不是 R 的正确POSIXt
(无论是POSIXct
)POSIXlt
对象,这意味着它只是一个字符串。在这种情况下,您可以使用以下方法将其删除:
gsub(':[^:]*$', '', '1.01.2016 0:00:05')
# [1] "1.01.2016 0:00"
但是,这仍然只是一个字符串,而不是日期或时间对象。如果将其解析为 R 知道的时间对象:
as.POSIXct("1.01.2016 0:00:05", format = "%d.%m.%Y %H:%M:%S", tz = "Asia/Kolkata")
# [1] "2016-01-01 00:00:05 IST"
那么你现在有一个 R 知道的时间对象......并且它默认以秒精度表示它(在控制台上打印它)。通常,可用于控制台打印的所有更改都是秒的精度,如
options("digits.secs")
# $digits.secs
# NULL
Sys.time()
# [1] "2018-06-26 18:21:06 PDT"
options("digits.secs"=3)
Sys.time()
# [1] "2018-06-26 18:21:10.090 PDT"
那么你可以获得更多。但是,唉,我确实知道认为有一个 R 选项可以说“总是POSIXt
以这种方式打印我的对象”。因此,您唯一的选择是(在您不再需要它成为类似时间的对象时)将其更改回没有类似时间值的字符串:
x <- as.POSIXct("1.01.2016 0:00:05", format = "%d.%m.%Y %H:%M:%S", tz = "Asia/Kolkata")
x
# [1] "2016-01-01 00:00:05 IST"
?strptime
# see that day-of-month can either be "%d" for 01-31 or "%e" for 1-31
format(x, format="%e.%m.%Y %H:%M")
# [1] " 1.01.2016 00:00"
(这同样适用于矢量。)
我的一部分建议转换为POSIXt
字符串,而不是我的gsub
示例,因为 usingas.POSIXct
会告诉您字符串何时与您期望的类似日期时间的对象不匹配,而gsub
会很高兴地做错事或什么也不做。
推荐阅读
- reactjs - Firebase 部署到自定义子域(不是项目 ID)
- javascript - LexicalEnvironment 和 VariableEnvironment 是如何工作的?
- java - 加载配置文件时,是否可以默认不包含返回的 Config 实例中的 Java 属性?
- python - Discord Py / 如何从服务器用户中删除特定角色
- django - 序列化程序中的 django-rest-framework 访问字段
- php - Laravel 访问 web.php 中的会话数据
- haskell - 如何将列表中第一个元素的所有出现移动到Haskell中列表的末尾?
- java - Split() Java 中带有换行符的表达式
- c - 我可以从 STDOUT_FILENO 中读取()吗?
- assembly - x86 SIMD 指令汇编中的 16 字节对齐(无 C 内在函数)