在R中使用另一个布尔向量对向量进行子集操作

10

使用以下两个R向量,我想使用boolMe中的布尔值提取valMe的一个子集。此外,我希望有两种可能的输出方式,一种是将boolMe中的FALSE值从valMe中省略掉,另一种是将FALSE值替换为NA。下面是更多详细说明:

输入

boolMe<-c(FALSE, TRUE, TRUE, TRUE, FALSE, TRUE)
valMe<-1:6

预期输出

NA 2 3 4 NA 6
或者
2 3 4 6

在Python中,我会这样做:`>>> a=[False, True, False, False, False, False]
b=[10, 11, 12, 13, 14, 15] [bb for (aa,bb) in zip(a,b) if aa] [11]`
- hhh
2
python3 中,import itertools; list(itertools.compress(b ,a)) - kev
2个回答

14
你可以直接使用[运算符对valMe进行索引:
> valMe[boolMe]
[1] 2 3 4 6

请参阅入门手册第2.7节以获取更多详细信息。


如果您有一个矩阵,并且想要保留所有列,您会如何处理? - confused

8
同样地,如果您需要NAs:
> valMe[!boolMe] <- NA
> valMe
[1] NA  2  3  4 NA  6
!表示逻辑非,因此您选择希望缺失的值。然后,在R的精彩之处,您将NA分配给所选值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接