我从一个大文件中对子数据进行了子集化,并发现X已添加到数据的每个列名中。我使用write.csv编写数据,从外部打开并手动从每列中删除X并保存文件。现在,当我再次读取此文件时,X仍然存在于列名中。示例:X2001,X2002,X2004等。
答案 0 :(得分:4)
您可以在此处查看差异:
dat1 <- read.table(text="2001 2002
45 32
46 35",sep="",header=TRUE)
和
dat2<- read.table(text="2001 2002
45 32
46 35",sep="",header=TRUE, check.names=FALSE)
colnames(dat1) #it is because by default `R` doesn't allow colnames that start with numbers
#[1] "X2001" "X2002"
colnames(dat2)
#[1] "2001" "2002"
我想说最好不要使用check.names=FALSE
,因为
dat2$2001
#Error: unexpected numeric constant in "dat2$2001"
但当然您可以使用backticks
来避免错误
dat2$`2001`
#[1] 45 46
在read.table
代码中,make.names
参数正在创建X
if (check.names)
col.names <- make.names(col.names, unique = TRUE)
例如:
make.names(c("2001", "2002"), unique=TRUE)
#[1] "X2001" "X2002"
答案 1 :(得分:1)
Guarav,如果您不想一直设置check.names
,请换read.table
(我不建议修改read.table
代码本身。)
read.table.raw.names <- function(...) {
args <- list(...)
if ("check.names" %in% names(args)) stop("Function does not require check.names to be set")
read.table(...,check.names=F)
}
然后,关注akrun的例子
dat1 <- read.table.raw.names(text="2001 2002
45 32
46 35",sep="",header=TRUE)
colnames(dat1)
#[1] "2001" "2002"