我不经常使用索引data.frame by row name,但有时候这样做有一个优势。但是,当我试图过滤不引人注意的行
时,我注意到了意想不到的结果 test <- data.frame(a = c("a", "b", "c"),
b = c("A", "B", "C"),
row.names = c(-99.5, 99.5, 99))
test["-99", ]
你会期望它会给你
a b
NA <NA> <NA>
但它返回
a b
-99.5 a A
只是具体而言
Session info ---------------------------------------------------------------
setting value
version R version 3.2.1 (2015-06-18)
system x86_64, mingw32
ui RStudio (0.99.441)
language (EN)
collate English_United Kingdom.1252
tz Europe/London
有什么想法吗?
答案 0 :(得分:6)
这确实是出乎意料的。
这个问题的答案在于索引时行名称的部分匹配:
mtcars["Val", ]
会给我们“Valient”排。这不适用于列:
mtcars[ ,"cy"]
为了消除这种情况,我使用了
子集subset(test, rownames(test) == "-99")
编辑:确实记录在?"[.data.frame"
[和[[提取方法部分匹配行名称]。默认情况下 既不是部分匹配列名,也不是[[如果精确= FALSE (如果精确= NA,则发出警告)。如果你想要完全匹配 行名称使用匹配,如示例中所示。
要对数据使用匹配:
test[match("-99", row.names(test)), ]