12

我想从我拥有的数据框中删除标题。我从 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 而不是顶部时。

4

8 回答 8

12

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

dd <- data.frame(x1 = 1:5, x2 = 11:15)
mm1 <- as.matrix(dd)
mm2 <- matrix(mm1, ncol = ncol(dd), dimnames = NULL)

我在这里也添加了我之前的评论
?data.frame:“列名应该是非空的,并且尝试使用空名将产生不受支持的结果。”。

于 2013-08-11T19:25:25.327 回答
9

将名称设置为 NULL

names(df) <- NULL

您还可以使用中的header选项read.csv

于 2013-08-11T19:09:12.363 回答
5

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

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

如果您的数据是 csv 文件,并且如果您使用 header=TRUE 来读取 R 中的数据,那么数据将具有与 csv 文件相同的 colnames,但如果您设置 header=FALSE,R 会将 colnames 分配为 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
于 2013-08-11T19:04:39.390 回答
3

你可以使用

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

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

于 2013-08-11T19:43:42.383 回答
3

它有几年的延迟,但您可以简单地使用重命名 de 列的向量:

## if you want to delete all column names:
colnames(df)[] <- ""

## if you want to delete let's say column 1:
colnames(df)[1] <- ""

## if you want to delete 1 to 3 and 7:
colnames(df)[c(1:3,7)] <- ""




于 2020-12-26T23:51:39.543 回答
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

但总的来说,我认为这些都不应该做。

于 2013-08-11T19:45:37.007 回答
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')
于 2015-01-28T05:51:42.133 回答
0

你可以简单地做:

print(df.to_string(header=False))

如果你也想删除行索引,你可以这样做:

print(df.to_string(index=False,header=False))
于 2021-10-06T09:09:00.497 回答