我有一个数据框如下:
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)
我现在很紧张,也不要相信,这可能会再次弹出,没有我知道的其他列,比如41和4100.
任何解释都会有所帮助!谢谢
这是由于部分匹配.要避免它,请使用[[提取列
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)
| 归档时间: |
|
| 查看次数: |
3307 次 |
| 最近记录: |