readr::read_csv()无法读取日期并返回NA。

3

我有一个csv文件test.csv,其中一列包含日期:

V1
14-01-02 9:10
14-01-02 9:10
14-01-02 9:21
14-01-02 9:34
14-01-02 9:34
14-01-02 9:34

使用readr::read_csv读取文件会产生NAs
V1
1 <NA>
2 <NA>
3 <NA>
4 <NA>
5 <NA>
6 <NA>
Warning message:
9 problems parsing 'test.csv'. See problems(...) for more details. 
read.csv似乎可以轻松加载它,但速度太慢了。实际的表格是322,509 x 45,我不想使用col_type选项指定每个列的类型。无论如何,它可以将列加载为字符吗?
2个回答

6

您可以在列表中指定列类型,其中只命名那些您不希望readr尝试识别列类型的列。

read_csv("test.csv", col_types = list(V1 = col_datetime()))

更多详细信息请参阅cran上的自述文件


谢谢,我之前没有意识到可以在“col_types”选项中指定哪一列。 - Dave

1

?read_csv可以看到 col_type 参数的解释:

如果为'NULL',则列类型将从输入的前30行中推断出来。这很方便(而且快速),但不够健壮。如果推断失败,则需要手动设定正确的数据类型。

听起来你可能会遇到问题

read_csv("temp.csv", col_types="T")  # T for datetimes

你也可以尝试使用read.csv读取第一行并获取类别,然后使用read_csv读取整个文件。之后需要将字符转换为日期时间格式。
samp <- read.csv("test.csv", nrows=1, strings=F)               # read one row
cols <- sapply(samp, class)                                    # get classes
key <- c("character"="c", "integer"="i", "logical"="l")        # make key, etc.
read_csv("test.csv", col_types=paste(key[cols], collapse=""))  # read with read_csv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接