R中的数字列名称

RCN*_*RCN 1 r numeric

我有一个数据框如下:

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")
Run Code Online (Sandbox Code Playgroud)

我知道拥有数字列名称不是最佳做法,但在这种情况下这是必要的.我一直在通过用反引号检索列来操纵我的数据框

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

> table(testtest$`10`)

 yes 
  1 
> 
Run Code Online (Sandbox Code Playgroud)

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

> table(testtest$`104`)

 yes 
 1 
> 
Run Code Online (Sandbox Code Playgroud)

我现在很紧张,也不要相信,这可能会再次弹出,没有我知道的其他列,比如414100.

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

akr*_*run 5

这是由于部分匹配.要避免它,请使用[[提取列

testtest[["10"]]
#NULL
Run Code Online (Sandbox Code Playgroud)

而正确的列名称给出了输出

 testtest[["104"]]
 #[1] NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA  
 #[12] NA    NA    NA    NA    "yes" NA    NA    NA    NA 
Run Code Online (Sandbox Code Playgroud)

根据 ?"$"

两个[[和$选择列表中的单个元素.主要区别在于$不允许计算指数,而[[确实如此].x $ name相当于x [["name",exact = FALSE]].此外,[[可以使用精确参数控制]的部分匹配行为.


通常,最好不要使用以数字开头的数字列名称.我们可以使用方便的函数附加非数字字符"X"make.names

names(testtest) <- make.names(names(testtest))
names(testtest)
#[1] "X104" "X15" 
Run Code Online (Sandbox Code Playgroud)