【问题标题】:Subsetting a vector using another boolean vector in R使用 R 中的另一个布尔向量对向量进行子集化
【发布时间】:2011-12-26 04:48:47
【问题描述】:

使用以下两个 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 中,我会这样做:&gt;&gt;&gt; a=[False, True, False, False, False, False] &gt;&gt;&gt; b=[10, 11, 12, 13, 14, 15] &gt;&gt;&gt; [bb for (aa,bb) in zip(a,b) if aa] [11]
  • python3, import itertools; list(itertools.compress(b ,a))

标签: r subset iterable-unpacking


【解决方案1】:

您可以使用[ 运算符直接索引valMe

> valMe[boolMe]
[1] 2 3 4 6

详情请参阅2.7 of the intro manual 部分。

【讨论】:

  • 如果你有一个矩阵并且你想保留所有列,你会怎么做?
【解决方案2】:

同样,如果您想要 NA:

> valMe[!boolMe] <- NA
> valMe
[1] NA  2  3  4 NA  6

! 否定逻辑布尔值,因此您可以选择要丢失的值。然后,在一点点 R 的魅力中,您将 NA 分配给选定的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-30
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多