我想将一个excel文件导入r,并且该文件包含具有日期和时间的列,格式为:“ 20.08.2018 16:32:20”。如果我将csv文件本身的格式更改为标准格式,则它看起来像这样:“ 43332,68912”。如果我使用“ read_excel” R读取文件,则此日期看起来像这样:“ 43332.689120370371”
如何将当前格式转换为R中的日期格式?
非常感谢!
答案 0 :(得分:4)
一个好的做法是,不要编辑.csv
(或excel)文件中的任何内容,以免将它们视为只读文件,并在脚本中进行更改(在R中也是如此)。
让我们将数据框称为“ my_df”,将日期时间变量称为“ date”。
library(readr)
library(magrittr)
my_df$date %<>% parse_datetime("%d.%m.%Y %H:%M:%S")
编辑:为了整理您的评论中的信息,我创建了一个Excel文件,其中一个名为STARTED
的列带有日期和时间,格式为“ 20.08.2018 16:32”:您在问题中指出的20英寸。由于您似乎喜欢readxl
:
library(readxl)
library(magrittr)
myData <- read_excel("myData.xlsx")
myData$STARTED %<>% parse_datetime("%d.%m.%Y %H:%M:%S")
与我上面已经编写的代码相同。这给出了:
# A tibble: 1 x 1
STARTED
<dttm>
1 2018-08-20 16:32:20
如果只得到NA
,则数据的格式不符合示例"20.08.2018 16:32:20"
的格式
答案 1 :(得分:0)
在与@prosoitos进行讨论之后,看来导入功能无法理解您的日期列:
注释中的示例数据行在日期字符串周围不包含引号。这意味着您通过使用excel(或类似工具)打开数据来复制该数据,或者您的调查工具没有将日期限定为字符串。您是否在excel中打开.csv,将其另存为.xlsx并尝试将结果导入R中?这将解释您所遇到的麻烦,因为excel可以尝试解释日期字符串并将其转换为其他人都没有使用的有趣的Microsoft格式。
请不要这样做,请使用从未与excel接触过的原始csv文件,然后将其直接导入R。
您的读取函数显然无法理解您的日期变量的内容,并且显然将其替换为一些unix standard time,这是自1970年以来的秒。但是,这些时间戳似乎无效(43332类似于中午(在1970/01/01上),否则您可以轻松地将其转换为人类可读的日期。
我建议您尝试使用以下命令导入csv:
read.csv("your_data.csv", header=TRUE, stringsAsFactors=FALSE)
您可能必须指定分隔符,例如sep = "\t"
(用于制表符分隔的文件)(如果不是空白),这是读取功能的默认分隔符。之后,数据框中的日期是简单的文本字符串,您可以按照@prosoitos的说明进行操作。
(很抱歉,添加了其他答案。我会对@prosoitos答案进行评论,但我的信誉点不足。)
答案 2 :(得分:-1)
将CSV读入R MyData
read.csv(file="TheDataIWantToReadIn.csv", header=TRUE, sep=",")