R中的数字列名

numeric column names in R

我有一个数据框如下:

structure(list(`104` = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, "yes", NA, NA, NA, NA), `15` = c(NA, 
NA, NA, NA, ">= 4.0", ">= 4.0", NA, "~ 2", "~ 2", "~ 2", "~ 2", 
"~ 2", "~ 2", "< 2.2", "~2.75", NA, "~2.75", "~2.75", "~2.75", 
"~2.75")), .Names = c("104", "15"), row.names = 45:64, class = "data.frame")

我知道使用数字列名不是最佳做法,但在这种情况下是必要的。我一直在通过使用反引号`

检索列来操纵我的数据框

不幸的是,我在上面的数据框中发现了一些有趣的东西。

> table(testtest$`10`)

 yes 
  1 
> 

但是没有名称为 10 的列,所以看起来它正在检索

> table(testtest$`104`)

 yes 
 1 
> 

我现在很紧张,不相信这可能会在我不知情的情况下再次弹出 414100 等其他栏目。

任何解释都会有所帮助! 谢谢

这是部分匹配造成的。为避免这种情况,请使用 [[ 提取列

testtest[["10"]]
#NULL

而正确的列名给出了输出

 testtest[["104"]]
 #[1] NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA  
 #[12] NA    NA    NA    NA    "yes" NA    NA    NA    NA 

根据?"$"

Both [[ and $ select a single element of the list. The main difference is that $ does not allow computed indices, whereas [[ does. x$name is equivalent to x[["name", exact = FALSE]]. Also, the partial matching behavior of [[ can be controlled using the exact argument.


一般情况下,最好不要使用数字列名或以数字开头的名称。我们可以使用方便的函数 make.names

附加一个非数字字符 "X"
names(testtest) <- make.names(names(testtest))
names(testtest)
#[1] "X104" "X15"