【发布时间】:2017-05-16 07:04:03
【问题描述】:
我的应用程序正在使用readxl 包的read_excel 函数读取xls 和xlsx 文件。
之前读取xls 或xlsx 文件时不知道列的顺序和确切数量。有 15 列预定义的列,其中 10 列 必填,其余 5 列 可选。因此,该文件将始终具有最少 10 列和 最多 15 列。
我需要将col-types 指定为强制性的 10 列。我能想到的唯一方法是使用列名来指定col_types,因为我知道该文件有所有 10 列都是强制性的,但它们是随机序列。
我试图寻找这样做的方法,但没有这样做。
谁能帮我找到一种按列名分配 col_types 的方法?
【问题讨论】:
-
简短的回答是否定的;它不像
reader::cols。如果结构非常规则,您可能可以伪造它,但这听起来不像您所拥有的。一个更简单的选择就是读取所有内容和子集。如果类型导致问题,请将所有内容都读取为字符并使用readr::type_convert或lapplytype.convert进行清理。 -
是的。我想到了你提到的那个选项。我只是想避免类型转换后文件读取的开销。但正如你所说,如果没有其他选择,我可能需要去。
-
老实说,有 15 个变量,在您的数据达到数百万行之前,类型转换所花费的时间可以忽略不计。
-
@alistaire 同意。
-
@alistaire 因为我不知道确切的列数,所以我无法指定
col_types。有什么想法吗?