excel 如何将类类型字符的日期转换回从.csv文件读取时的日期?[duplicate]

toe95027  于 2023-03-20  发布在  其他
关注(0)|答案(2)|浏览(113)

此问题在此处已有答案

Reading CSV file in R and formatting dates and time while reading and avoiding missing values marked as?(1个答案)
Specifying colClasses in the read.csv(7个答案)
11小时前关门了。
这应该很容易,但我在这里失去了我的头脑。
我使用read.csv读取了一个excel .csv文件。我可以看到,当我在列上运行类时,它当前被读取为字符类型。我需要R将其读取为日期类型。
我试过使用as.Date,as.Date.character,也试过lubridate的函数,但是没有任何效果。每次我尝试都得到一个错误消息:“字符结束日期(x):字符串不是标准的明确格式”或者我尝试填充值的对象返回为空。我读过几个网站和stackoverflow上发布的问题,但没有一个有效。我认为这是因为大多数问题的答案都不是直接来自.csv文件的字符串(如果我手动将其输入R Studio,我可以让它工作,但这违背了我的问题的要点)。
我试着回到Excel中,手动将单元格更改为不同的日期格式,但因为它是.csv,所以它会强制它回到“3/18/2023”格式。
我相信其他人已经尝试过将日期从.csv文件转换为字符。如何转换?

aiazj4mn

aiazj4mn1#

我们可以使用lubridate的parse_date_time()函数将字符串值转换为从csv文件中读取的日期。

# first, use system() to display the file saved to CSV from Excel
system("more ./data/SampleDates.csv")

...和输出:

> system("more ./data/SampleDates.csv")
Name,startDate,endDate
Jane,8/23/22,3/11/23
Joe ,10/1/21,4/15/22

此时,日期是“不明确的”,因为R不能分辨日期字段是日期中的第一个字段还是最后一个字段。
接下来,我们将数据读入R,加载lubridate并使用parse_date_time()将字符串转换为日期,这允许我们指定年份字段是最后一个字段,并且是2位数(%y)而不是4位数(%Y)。

df <- read.csv("./data/SampleDates.csv")
library(lubridate)
df$startDate <- parse_date_time(df$startDate,"%m/%d/%y")
df$endDate <- parse_date_time(df$endDate,"%m/%d/%y")

最后,我们打印结果以显示日期值现在呈现为日期。

df

...和输出:

> df
  Name  startDate    endDate
1 Jane 2022-08-23 2023-03-11
2 Joe  2021-10-01 2022-04-15

..并证明startDateendDate是日期:

> # show that startDate and endDate are now dates
> class(df$startDate)
[1] "POSIXct" "POSIXt" 
> class(df$endDate)
[1] "POSIXct" "POSIXt
7cwmlq89

7cwmlq892#

如果其他人遇到这个问题,我仍然不知道如何使用.csv;但是,如果您可以将Excel文件另存为.xls或.xlsx,那么我找到了一个解决方案:

install.packages(tidyverse)
library(readxl)

df <- read_excel("YourFile.xlsx")

test <- as.Date(df$DateColumn)

我不知道为什么R Studio喜欢使用这种方法导入相同的日期列,而不是.csv方法,但它不会再抛出那个错误了。希望有人能发布一个解决方案,不涉及重新保存excel文件为不同的格式,但这对我所需要的工作,所以它回答了我的问题。

相关问题