在data.table对象中显示行名称

Dav*_*urg 13 r data.table

参考:在尝试回答这个非常基本的问题时,我突然意识到我无法rownamesdata.table对象中显示

玩具示例

library(data.table)
DT <- data.table(A = letters[1:3])
DT
##    A
## 1: a
## 2: b
## 3: c
row.names(DT) <- 4:6
row.names(DT)
## [1] "4" "5" "6" # seem to work
Run Code Online (Sandbox Code Playgroud)

要么

rownames(DT) <- 7:9
rownames(DT)
## [1] "7" "8" "9" # seems to be ok too
Run Code Online (Sandbox Code Playgroud)

但是在显示数据本身时,行名称保持不变

DT
##    A
## 1: a
## 2: b
## 3: c
Run Code Online (Sandbox Code Playgroud)

data.table为了提高效率,我会假设忽略不必要的属性,但attributes似乎不同意

attributes(DT)
# $names
# [1] "A"
# 
# $row.names
# [1] 7 8 9
# 
# $class
# [1] "data.table" "data.frame"
# 
# $.internal.selfref
# <pointer: 0x0000000000200788>
Run Code Online (Sandbox Code Playgroud)

edd*_*ddi 18

这或多或少是逐字逐句的评论.

data.table不支持行名称.这是故意的,因为行名称是一个糟糕的设计选择,因为它们使用起来比列更麻烦(特别是data.table在列中,列比处理更容易处理data.frame)并且只是哪种类型的子集数据列可以表示(回想一下,行名data.frame只是一个字符向量,而列可以是任何东西).

  • data.table 团队同意您的观点。这就是为什么 data.table 具有如此强大的索引操作,请参阅他们的介绍/doc:https://cran.r-project.org/web/packages/data.table/vignettes/datatable-intro.html。row.names 可能可用于索引,但它们不是一个好的索引类。 (3认同)
  • 看着`pandas.Index`,我不想为没有实现一个好的Index 类而原谅`data.table`。 (2认同)