如何删除数据框中的标头?

时间:2013-08-11 19:02:31

标签: r header dataframe

我想从我拥有的数据框中删除标头。我从csv文件中读取数据然后我转换它,但它创建了一个新的标题,它是文件的名称和数据来自文件的行。

以下是数据帧df的示例:

     a.csv.1   a.csv.2   a.csv.3   ...
  x        5         6         1   ...
  y        2         3         2   ...  

我想删除a.csv.n行,但是当我尝试df <- df[-1,]时,它会删除行x而不是顶部。

6 个答案:

答案 0 :(得分:9)

如果你真的,真的,真的不喜欢列名,你可以将数据框转换为矩阵(记住可能的不同class变量的强制),然后删除{{1 }}

dimnames

我也在这里添加我之前的评论:
dd <- data.frame(x1 = 1:5, x2 = 11:15) mm1 <- as.matrix(dd) mm2 <- matrix(mm1, ncol = ncol(dd), dimnames = NULL) :“列名称应为非空,并且尝试使用空名称将导致不受支持的结果。”

答案 1 :(得分:5)

将名称设为NULL

names(df) <- NULL

您还可以使用header

中的read.csv选项

答案 2 :(得分:3)

您可以使用names(df)更改标题或列名称。如果newnames是名称列表newname<-list("col1","col2","col3"),那么names(df)<-newname将为您提供col列名为col1 col2 col3的数据。

正如@ Henrik所说,col名称应该是非空的。设置names(df)<-NULL将在列名中给出NA。

如果您的数据是csv文件,并且如果您使用header = TRUE来读取R中的数据,那么数据将具有与csv文件相同的名称,但是如果您设置header = FALSE,则R会将组合名称指定为V1, V2,...和原始csv文件中的您的colnames显示为第一行。

anydata.csv  
      a b c  d
    1 1 2 3 13
    2 2 3 1 21

read.csv("anydata.csv",header=TRUE)
      a b c  d
    1 1 2 3 13
    2 2 3 1 21

read.csv("anydata.csv",header=FALSE)

  V1 V2 V3 V4
1  a  b  c  d
2  1  2  3 13
3  2  3  1 21

答案 3 :(得分:3)

您可以使用

setNames(dat, rep(" ", length(dat)))

其中dat是数据框的名称。然后所有列都将具有名称" ",因此将是“隐形”。

答案 4 :(得分:1)

正如已经提到的那样,没有列名只是数据框架不会发生的事情,但我有点猜测你不在乎如果他们在那里你只是不想要打印数据框时看到它们?如果是这样,你可以写一个新的打印功能来解决这个问题,如下所示:

> dat <- data.frame(var1=c("A","B","C"),var2=rnorm(3),var3=rnorm(3))
> print(dat)
  var1       var2       var3
1    A  1.2771777 -0.5726623
2    B -1.5000047  1.3249348
3    C  0.1989117 -1.4016253
> ncol.print <- function(dat) print(matrix(as.matrix(dat),ncol=ncol(dat),dimnames=NULL),quote=F)
> ncol.print(dat)
     [,1] [,2]       [,3]      
[1,] A     1.2771777 -0.5726623
[2,] B    -1.5000047  1.3249348
[3,] C     0.1989117 -1.4016253

您的另一个选项是将变量名称设置为唯一的空白量,例如:

> names(dat) <- c(" ", "  ", "   ")
> dat

1 A  1.2771777 -0.5726623
2 B -1.5000047  1.3249348
3 C  0.1989117 -1.4016253

您也可以编写一个函数来执行此操作:

> blank.names <- function(dat){
+   for(i in 1:ncol(dat)){
+     names(dat)[i] <- paste(rep(" ",i),collapse="")
+   }
+   return(dat) 
+ }
> dat <- data.frame(var1=c("A","B","C"),var2=rnorm(3),var3=rnorm(3))
> dat
  var1        var2       var3
1    A -1.01230289  1.2740237
2    B -0.13855777  0.4689117
3    C -0.09703034 -0.4321877
> blank.names(dat)

1 A -1.01230289  1.2740237
2 B -0.13855777  0.4689117
3 C -0.09703034 -0.4321877

但一般来说,我认为不应该做任何事情。

答案 5 :(得分:0)

我在我的一个R脚本中使用的函数:

read_matrix <- function (csvfile) {
    a <- read.csv(csvfile, header=FALSE)
    matrix(as.matrix(a), ncol=ncol(a), dimnames=NULL)
}

如何称呼它:

iops_even <-  read_matrix('even_iops_Jan15.csv')
iops_odd  <-  read_matrix('odd_iops_Jan15.csv')