我用一列创建一个数据框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

最佳答案

答案是向量虽然可以具有名称,但它们没有行名称。

当您将列作为列表项访问时,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

关于r - R为什么按行名和组件名列出数据框中的元素会返回NA?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13360295/

10-12 23:35