我想导入CSV文件
today,color
01/02,blue
01/04,green
03/14,orange
07/04,red使用readr创建一列date对象。
library(tidyverse)
library(lubridate)
read_csv("test.csv", col_types = "Dc") #first attempt
read_csv("test.csv", col_types = cols( #second attempt
col_date(format = "%m/%d"),
col_character()))我认为我的第一次尝试由于非标准日期格式而不起作用,所以在我的第二次尝试中,我很明确。两者都没有成功,并且都返回了相同的警告。
Warning: 4 parsing failures.
row col expected actual file
1 today valid date 01/02 'test.csv'
2 today valid date 01/04 'test.csv'
3 today valid date 03/14 'test.csv'
4 today valid date 07/04 'test.csv'
# A tibble: 4 x 2
today color
<date> <chr>
1 NA blue
2 NA green
3 NA orange
4 NA red我应该如何构造这个导入?
发布于 2021-07-29 16:52:38
它不是日期格式,因此col_date将不起作用,也就是说,我们也需要'year‘来使用它。相反,最好将其读为character
df1 <- read_csv("test.csv", col_types = "cc") 然后,根据需要添加year部件,将其转换为Date类
library(lubridate)
df1$today <- dmy(paste0(df1$today, "/2021"))发布于 2021-07-29 18:32:12
真正的问题是,我们所拥有的不是日期。日期有年份,问题中的输入没有年份。
1)为了克服上面的问题,我们可以定义一个特殊的类,它可以接受所需格式的不带年的月份和日期。
setClass("mmdd")
ch2mmdd <- function(from) as.Date(from, format = "%m/%d")
setAs("character", "mmdd", ch2mmdd)
read.csv(text = Lines, colClasses = c("mmdd", "character"))给予:
today color
1 2021-01-02 blue
2 2021-01-04 green
3 2021-03-14 orange
4 2021-07-04 red2)或者使用read_csv,之后再进行转换。它使用(1)中的ch2mmdd函数,但不需要相关的S4类。另一方面,它在之后进行转换,而问题似乎想要这样做,因为它在(1)中被读入。
Lines %>%
read_csv %>%
mutate(today = ch2mmdd(today))备注
Lines <- "today,color
01/02,blue
01/04,green
03/14,orange
07/04,red"https://stackoverflow.com/questions/68579956
复制相似问题