R 显示data.table对象中的行名称

R 显示data.table对象中的行名称,r,data.table,R,Data.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 我假设data.table为了提高效率而忽略了不必要的属性,但attributes似乎不同意 a

参考:在试图回答时,我突然意识到我无法在
数据表
对象中显示
行名

玩具示例

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
我假设
data.table
为了提高效率而忽略了不必要的属性,但
attributes
似乎不同意

attributes(DT)
# $names
# [1] "A"
# 
# $row.names
# [1] 7 8 9
# 
# $class
# [1] "data.table" "data.frame"
# 
# $.internal.selfref
# <pointer: 0x0000000000200788>
属性(DT)
#$names
#[1]“A”
# 
#$row.name
# [1] 7 8 9
# 
#美元级
#[1]“data.table”“data.frame”
# 
#$.internal.selfref
# 

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


数据。表
不支持行名称。这是有意为之的,因为行名称是一个糟糕的设计选择,因为它们比列(尤其是在
data.table
中,列比
data.frame
中更容易处理)使用起来要麻烦得多,并且只是数据列可以表示的类型的子集(回想一下,
data.frame
中的行名称仅是字符向量,而列可以是任何内容).

修改
数据应该很容易。table::print.data.table
来打印实际的行名。我必须做一些基准测试,但我不认为您会损失太多性能。这是一个设计决策。就我个人而言,我认为data.tables中的行名没有多大用处。如果DT相当大,您永远不会显示所有行名d对于其他用途,最好将这些信息放在一列中。事实上,我怀疑data.tables的data.frame遗产只有一个row.names属性。@罗兰德,当我需要行名时,我给出了一个具体的例子,所以这不是任意的讨论,但我知道你要去哪里。我想知道为什么乔什删除了他的答案…@eddi:糟糕的设计选择。嗯。想解释一下吗?如果你正在用行名转换data.frame
DF
,你可以使用
DT查看
pandas.Index
,我不想为没有实现好的索引类而原谅
data.table
。data.table团队同意你的观点。这就是为什么data.table具有如此强大的索引功能请参阅它们的简介/doc:.row.names可以用于索引,但它们不是一个好的索引类。
DT
##    A
## 1: a
## 2: b
## 3: c
attributes(DT)
# $names
# [1] "A"
# 
# $row.names
# [1] 7 8 9
# 
# $class
# [1] "data.table" "data.frame"
# 
# $.internal.selfref
# <pointer: 0x0000000000200788>