4

在 R 数据框中,行名必须是唯一的。

df <- mtcars
rownames(df) <- rep("duplicate!", nrow(df))
> Error in `row.names<-.data.frame`(`*tmp*`, value = value) : 
>   duplicate 'row.names' are not allowed
> In addition: Warning message:
> non-unique value when setting 'row.names': ‘duplicate!’ 

或者

df <- data.frame(mtcars, row.names=rep("duplicate!", nrow(mtcars)))
> Error in data.frame(mtcars, row.names = rep("duplicate!", nrow(mtcars))) : 
  duplicate row.names: duplicate!

那么,以下行为的动机是as.data.frame()什么?这是故意的还是错误的?

m <- as.matrix(mtcars)
rownames(m) <- rep("duplicate!", nrow(m))
df <- as.data.frame(m)

结果如下:

any(duplicated(rownames(df)))  # == TRUE
nrow(df)  # == 32
length(unique(rownames(df)))  # == 1
df["duplicate!", ]  # returns a single row...
>            mpg cyl disp  hp drat   wt  qsec vs am gear carb
> duplicate!  21   6  160 110  3.9 2.62 16.46  0  1    4    4

(使用R 版本 3.4.3 (2017-11-30)运行)

4

1 回答 1

1

是的,正如 Martyn Plummer 在官方 R-devel 邮件列表 ( https://stat.ethz.ch/mailman/listinfo/r-devel/ ) 中确认的那样,这是一个错误,我可能很快就会提交更改修复该源的源。

于 2018-03-07T20:47:46.023 回答