R

时间:2016-09-02 19:41:24

标签: 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")

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

检索列来操纵我的数据框

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

> table(testtest$`10`)

 yes 
  1 
> 

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

> table(testtest$`104`)

 yes 
 1 
> 

我现在很紧张,并且不相信这可能会在我不知道414100等其他列的情况下再次出现。

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

1 个答案:

答案 0 :(得分:5)

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

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 

根据?"$"

  

两者[[和$选择列表中的单个元素。主要区别   是$ $不允许计算指数,而[[做。 x $名字是   相当于x [[&#34; name&#34;,exact = FALSE]]。另外,部分匹配   行为[[可以使用确切的参数控制。

通常,最好不要使用以数字开头的数字列名称。我们可以附加一个非数字字符&#34; X&#34;方便的功能make.names

names(testtest) <- make.names(names(testtest))
names(testtest)
#[1] "X104" "X15"