我的数据框如下:
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
>
我现在很紧张,并且不相信这可能会在我不知道41
和4100
等其他列的情况下再次出现。
任何解释都会有所帮助! 感谢
答案 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"