【问题标题】:R Subsetting vector with logical matrixR 带有逻辑矩阵的子集向量
【发布时间】:2018-05-03 04:14:25
【问题描述】:

我想通过以下方式用逻辑矩阵对数值向量进行子集化:给定向量 y

y <- c(4,8,1,3,5,7)

还有一个逻辑矩阵 lmat

lmat <- t(matrix(c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
TRUE,  FALSE, FALSE, FALSE, FALSE, FALSE,
FALSE, TRUE,  FALSE, FALSE, FALSE, FALSE,
TRUE,  TRUE,  FALSE, FALSE, FALSE, FALSE,
FALSE, FALSE,  TRUE, FALSE, FALSE, FALSE,
TRUE,  FALSE,  TRUE, FALSE, FALSE, FALSE),  ncol = 6))

看起来像这样

> lmat
      [,1]  [,2]  [,3]  [,4]  [,5]  [,6]
[1,] FALSE FALSE FALSE FALSE FALSE FALSE
[2,]  TRUE FALSE FALSE FALSE FALSE FALSE
[3,] FALSE  TRUE FALSE FALSE FALSE FALSE
[4,]  TRUE  TRUE FALSE FALSE FALSE FALSE
[5,] FALSE FALSE  TRUE FALSE FALSE FALSE
[6,]  TRUE FALSE  TRUE FALSE FALSE FALSE

我想应用一些函数 x(),它根据 lmat 的行对 y 进行子集化并返回一个列表。所以 x(y) 会返回:

[[1]]
numeric(0)

[[2]]
[1] 4 9

[[3]]
[1] 8

[[4]]
[1] 4 8 9

[[5]]
[1] 1

[[6]]
[1] 4 1 9

我仍在学习 apply 函数,我怀疑这在 apply 或 sapply 上是可能的,尽管我尝试使用其中一个函数来获得我想要的结果。我基本上想要

y[lmat[1,]]
y[lmat[2,]]
y[lmat[3,]]

等等……

但是 lmat 很大,我认为有一种方法可以不用循环。谢谢。

【问题讨论】:

  • 您是否打算在 y 中有 7 个值,而在 lmat 中只有 6 行?
  • 刚刚修好,感谢您的关注。

标签: r list subset apply sapply


【解决方案1】:
lapply(1:nrow(lmat), function(i) y[lmat[i,]])
#OR
apply(lmat, 1, function(x) y[x])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-16
    • 2021-06-20
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多