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.frameDF
,你可以使用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>