使用unname删除data.frame的dimnames不起作用

时间:2016-10-10 02:33:39

标签: r dataframe names

我尝试删除data.frame的rownames和colnames。正如Jason所说,这可以通过unname完成,然后将rownames设置为NULL。我注意到手册中说unname使用选项force = T会一步完成同样的事情:

  

强制逻辑;如果为true,则dimnames(名称和行名称)为   甚至从data.frames中删除。

然而,这对我不起作用:

d <- data.frame(a = c(x1 = 1, x2 = 2), b = c(x1 = 'a', x2 = 'b'))
unname(d, force = T)

# Error in `dimnames<-.data.frame`(`*tmp*`, value = NULL) : 
#   invalid 'dimnames' given for data frame

是什么原因?

sessionInfo()
# R version 3.3.1 (2016-06-21)
# Platform: x86_64-pc-linux-gnu (64-bit)
# Running under: Ubuntu 16.04.1 LTS
# 
# locale:
#  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
#  [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
#  [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
#  [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
#  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
# [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       
# 
# attached base packages:
# [1] stats     graphics  grDevices utils     datasets  methods   base

2 个答案:

答案 0 :(得分:3)

怪异。看起来像这里的错误(代码行为与文档不匹配)。

作为解决方案,要删除rownames,您需要:

> d <- unname(d)
> rownames(d) <- NULL
> d

1 1 a
2 2 b

最左边的数字列是R的标准data.frame行编号,适用于没有rownames的data.frame

答案 1 :(得分:-1)

如果您需要针对您的数据的解决方案,但没有解答为什么强制= T 无法正常工作。

#read data
d <- data.frame(a = c(x1 = 1, x2 = 2), b = c(x1 = 'a', x2 = 'b'))

original data

#convert to matrix
m1 <- as.matrix(d) 
#remove dimnames
m2 <- matrix(mm1, ncol = ncol(d), dimnames = NULL)
m2 #output the data

result

似乎 unname()不适用于 data.frame ,即使它说它适用于文档。