R 中的 fread data.table 不读入列名

fread data.table in R doesn't read in column names

将数据文件读入 R 时,我可以使用 data.table 包将其作为 data.framedata.table 读入。我希望将来使用 data.table,因为它可以更好地处理大数据。但是,这两种方法都存在问题(read.table 代表 data.frames,fread 代表 data.tables),我想知道是否有简单的解决方法。

当我使用 read.table 生成 data.frame 时,如果我的列名包含冒号或空格,它们将被句点替换,这是我不想要的。我希望在 "as is."

中读取列名

或者,当我使用 fread 生成 data.table 时,我的列名根本没有被读入,这显然是不需要的。

查看下面的要点以获得可重现的示例:

https://gist.github.com/jeffbruce/b966d41eedc2662bbd4a

干杯

这是一个可能有效的解决方案。我不确定它是否是最短的解决方案,或者您可以通过巧妙地使用数据 table 中的 drop 来实现,但下面的 hack 确实有效。 "problem" 是文件中的行号。

先读入头文件,再table后加入数据

header <- read.table("yourfile.csv", header = TRUE, nrow = 1)
indata <- fread("yourfile.csv", skip=1, header=FALSE)
setnames(indata, colnames(header))

R 始终尝试转换列名以确保它们是有效的变量名,因此它会添加句点来代替空格和冒号。如果你不想,你可以在使用 read.table

的同时使用 check.names=FALSE
df1<-read.table("data.txt",check.names = FALSE)

sample(colnames(df1),10)
 [1] "simple lobule white matter"                       
 [2] "anterior lobule white matter"                     
 [3] "hippocampus"                                      
 [4] "lateral olfactory tract"                          
 [5] "lobules 1-2: lingula and central lobule (ventral)"
 [6] "Medial parietal association cortex"               
 [7] "Primary somatosensory cortex: trunk region"       
 [8] "midbrain"                                         
 [9] "Secondary auditory cortex: ventral area"          
[10] "Primary somatosensory cortex: forelimb region"  

你可以看到 colnames 保持原样。