7

我创建了一个包含一列的数据框 dfrm,并将行名设置为:

v1 = c(1,2,3)
dfrm <- data.frame(v1)
row.names(dfrm) <- c("AD","BP","CD")

dfrm
   v1
AD  1
BP  2
CD  3

我可以通过行名和索引访问元素:

dfrm$v1[1]
[1] 1

我可以通过行名和引号中的组件名访问元素:

dfrm["AD","v1"]
[1] 1

但是为什么我不能通过行名和组件名访问元素呢?

dfrm$v1["AD"]
[1] NA
4

1 回答 1

5

答案是向量没有行名,尽管它们可以有名称。

当您将列作为列表项访问时,R 不会采取将行名传递给向量名称的额外步骤:

> dfrm$v1
[1] 1 2 3
> dfrm[["v1"]]
[1] 1 2 3
> dfrm[,"v1"]
[1] 1 2 3
> dfrm[,1]
[1] 1 2 3
> names(dfrm$v1)
NULL

请注意,这可能是一件好事,因为有用的情况是有限的,并且每次 data.frame 有一个列被拉出时复制名称的开销可能不值得。

如果您想自己复制它们:

> vone <- dfrm$v1
> names(vone) <- rownames(dfrm)
> vone
AD BP CD 
 1  2  3 
于 2012-11-13T12:00:41.773 回答