我用一列创建一个数据框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
答案 0 :(得分:5)
答案是矢量没有rownames,尽管它们可以有名字。
当您以列表项的形式访问列时,R不会采取额外的步骤将rownames传递给向量的名称:
> 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