R 中的 fread data.table 不读入列名
fread data.table in R doesn't read in column names
将数据文件读入 R 时,我可以使用 data.table
包将其作为 data.frame
或 data.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
保持原样。
将数据文件读入 R 时,我可以使用 data.table
包将其作为 data.frame
或 data.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
保持原样。