R中的fread data.table不会读取列名

时间:2015-09-24 17:21:20

标签: r data.table read.table

将数据文件读入R时,我可以使用data.frame包以data.tabledata.table的形式阅读。我希望将来使用data.table,因为它更好地处理大数据。但是,这两种方法都存在问题(数据框架为read.table,data.tables为fread),我想知道是否有简单的修复方法。

当我使用read.table生成data.frame时,如果我的列名称包含冒号或空格,则它们会被句号替换,我不想要。我希望在"中读取列名称。"

或者,当我使用fread生成data.table时,根本不会读取我的列名,这显然是不可取的。

请查看以下要点,以获得可重复的示例:

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

干杯

2 个答案:

答案 0 :(得分:9)

这是一个可行的解决方案。我不确定它是否是最短的解决方案,或者您可以通过在数据表中巧妙地使用drop来实现,但下面的黑客确实有效。 “问题”是文件中的行号。

首先读入头文件,然后在

之后将其添加到数据表中
header <- read.table("yourfile.csv", header = TRUE, nrow = 1)
indata <- fread("yourfile.csv", skip=1, header=FALSE)
setnames(indata, colnames(header))

答案 1 :(得分:6)

R总是尝试转换列名以确保它们是有效的变量名,因此它会添加句点来代替空格和冒号。如果您不想要,可以在使用check.names=FALSE

时使用read.table
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保持不变。