我该如何从数据的列名中删除子集变量X?

时间:2014-09-20 08:49:11

标签: r

我从一个大文件中对子数据进行了子集化,并发现X已添加到数据的每个列名中。我使用write.csv编写数据,从外部打开并手动从每列中删除X并保存文件。现在,当我再次读取此文件时,X仍然存在于列名中。示例:X2001,X2002,X2004等。

2 个答案:

答案 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"