通过布尔值索引R数据帧

时间:2016-12-02 16:27:13

标签: r

假设我们有一个数据框

a[1:3,2:3]
AWAY HOME
1        CLE       BOS
2        MIL       CHI
3        POR       LAL

如果我这样做

a[1:3,2:3]==c("CLE","BOS")
AWAY HOME
1      TRUE      TRUE
2     FALSE     FALSE
3     FALSE     FALSE

我按预期得到了。但是,如果我做了

a[,2:3]==c("CLE","BOS")
AWAY HOME
1       TRUE     FALSE
2      FALSE     FALSE
3      FALSE     FALSE
....(Others left out, as unimportant)....

为什么会这样?它不应该给出相同的答案,除了另一个在整个数据帧上执行吗?这种差异来自哪里?两种情况都不应该作为第一行返回TRUE TRUE吗?

1 个答案:

答案 0 :(得分:0)

我们可以使用%in%代替==来比较单个元素

a[1:2] <- lapply(a[1:2], '%in%' , c("CLE", "BOS"))
a
#   AWAY  HOME
#1  TRUE  TRUE
#2 FALSE FALSE
#3 FALSE FALSE

有时,==按预期工作,但这只是偶然因为它按列进行比较,即在'AWAY'列中,它将第一个元素与“CLE”进行比较,第二个与“BOS”,第三名是“CLE”,第四名是“BOS”(由于回收)。这需要对元素进行某种排序以使输出正确,而%in%检查这些元素是否存在。