Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R-与不同的datetime类、格式和其他参数合并时的关注点_R_Dplyr_Time Series_Tidyverse - Fatal编程技术网

R-与不同的datetime类、格式和其他参数合并时的关注点

R-与不同的datetime类、格式和其他参数合并时的关注点,r,dplyr,time-series,tidyverse,R,Dplyr,Time Series,Tidyverse,我一直在猜测这个问题应该放在这里,还是放在MetaExchange中,或者放在Cross-Validated中,因为这里可能会被解释为太宽泛/不具体。所以我会尽量具体一些 假设我有两个数据集。它们都有一个日期列,但其中一个是character class,另一个在读取数据集时自动转换为将不太喜欢的日期类放在此处 最简单的方法是将两列转换为相同的格式(即YYYY/mm/dd),然后转换为字符,然后合并。容易的。但是,如果您需要再次使用这些日期列,则必须将它们转换回,将您最喜欢的日期类放在此处,这会

我一直在猜测这个问题应该放在这里,还是放在
MetaExchange
中,或者放在
Cross-Validated
中,因为这里可能会被解释为太宽泛/不具体。所以我会尽量具体一些

假设我有两个数据集。它们都有一个日期列,但其中一个是character class,另一个在读取数据集时自动转换为
将不太喜欢的日期类放在此处

最简单的方法是将两列转换为相同的格式(即
YYYY/mm/dd
),然后转换为字符,然后合并。容易的。但是,如果您需要再次使用这些日期列,则必须将它们转换回
,将您最喜欢的日期类放在此处
,这会使您(我认为)成为一个效率低下的代码编写者

我正在努力提高效率,所以我将两个数据集和它们的两个类合并为date。然而,出现了一些问题:

  • 如果两列都是格式相同、类别相同但时区不同的日期,会有问题吗?(我不这么认为,但我不能100%确定是否存在反例,因此提出了这个问题)
  • 如果两列都是具有相同格式和不同类别的日期(即一列在内部存储为年、月、日,另一列从1900年起存储为秒),则合并是在两个日期都在内部存储的情况下完成的?如果是这样的话,R是否足够聪明,能够比较它们,并快速得出哪些是相同的,即使它们在内部的存储方式不同
  • datetimes的逻辑是一样的?如果是相同的datetime类、格式,但时区不同,R是否足够聪明,能够识别两个具有不同时区和不同/相同类和格式的相等datetime
最后,问题是:(1)日期或(2)日期时间合并如何严格按照不同或相同(1)类、(2)格式和(3)时区进行合并


目前,我使用tidyverse/dplyr作为默认值,并在本例中使用strtime()和strftime()进行转换。尝试了几次datatable,但不喜欢它的语法。如果你认为你有更好的选择来代替那些,请随意提出!(这意味着我放置的标签并非专门针对那些软件包,它们只是我使用的标签)

如评论中所述,使用
lubridate
可以简化这些问题

不带润滑油的润滑油

library(lubridate)

date1 == datetime1
[1] TRUE
date1 == datetime2
[1] TRUE
lubridate::tz(Sys.Date())
[1] "UTC" 
date1警告:“=”的不兼容方法(“Ops.Date”、“Ops.POSIXt”)
#>秒最小小时mday周一年wday yday isdst
#>假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假
使用
润滑油

library(lubridate)

date1 == datetime1
[1] TRUE
date1 == datetime2
[1] TRUE
lubridate::tz(Sys.Date())
[1] "UTC" 
重要的一点是,
lubridate
属性
UTC
时区到
Date

library(lubridate)

date1 == datetime1
[1] TRUE
date1 == datetime2
[1] TRUE
lubridate::tz(Sys.Date())
[1] "UTC" 

Stackoverflow(SO)用于编程问题。一个编程问题应该有一个示例数据和预期输出。我认为这不是解释理论概念或验证理论概念的好地方。(尽管网站上有这样的问题的例子)。@RonakShah我同意你的观点。尽管如此。。。克里斯,你的观察是对的。在整个分析工作流中,应将日期作为日期处理,以避免转换和重新转换。最后,这就是类型类的用途!在使用tidyverse时,请查看
{lubridate}
包。您将获得“内置”时区问题的处理。