我导入了一个包含大约200列的csv文件。使用的代码:
read.csv2("t_table.txt", header = TRUE, stringsAsFactors=FALSE)
不同列的数据类型各不相同(例如文本、数字、日期等)。
我不需要所有列,因此在导入数据时不会分配数据类型,因为(保留所有列以备第三方请求额外分析时使用)。每当我使用一列,而文本数据类型不够时,我就会转换该列的数据类型(并存储它)。
我想知道在处理多列的输入表时,这是否被认为是一种好的/最佳的做法(我怀疑不是…)。这里有什么建议?
请注意,我使用了一个配置表,在该表中,我将属性/特征分配给不同的列。因此,我考虑做以下事情:用数据类型列扩展配置表(将数据类型链接/分配给每列),并编写一个脚本,将数据类型分配给每一列。对这种方法有什么想法吗?
注意:我认为使用配置表很容易,因为它们减少了代码量,增加了代码的透明度,并且经常将对代码的更改减少为对配置表的更改。
虽然建议的一些方法可能更好,但我提出了一种对我来说很好的方法,不需要大量的工作来设置或维护;例如,指定每个字段的数据类型的配置表将需要大量的设置工作和维护工作。
我的方法包括使用fread
:将数据导入为data.table
t_input_table = fread(paste(locationConfig, "t_input_table.csv", sep="/"),
header = TRUE, stringsAsFactors=FALSE)
fread
能够很好地区分整数、数字和字符字段。就我而言,日期被视为文本。但是,所有日期字段标题"都包含字符串"_date"。然后我查找这些字段,并确保它们被分配了一个日期类型:
dateColumns = grep("_date$", colnames(t_input_table))
t_input_table[ , (dateColumns) := lapply(.SD, as.Date, format="%d/%m/%Y"), .SDcols = dateColumns]