【问题标题】:Is there a way to "broaden" True values of a vector in R?有没有办法“扩大”R中向量的真实值?
【发布时间】:2020-03-26 14:08:25
【问题描述】:

我有一个逻辑值向量,其中只有少数为真,我想转换这个向量,使 TRUE 两边的两个值也变为 TRUE。

所以换句话说,我想像这样转换一个向量:

...FALSE FALSE FALSE TRUE FALSE FALSE FALSE...

所以每个 TRUE 值周围​​的两个 FALSE 也变为 TRUE,所以最终向量看起来像:

...FALSE TRUE TRUE TRUE TRUE TRUE FALSE...

这是我想要更改的一个真实示例:

[20] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE
[39] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE FALSE
[58] FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE FALSE FALSE 
[77] FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE
[96]  TRUE  TRUE

【问题讨论】:

  • 类似x[c(which(x) - 1, which(x) + 1)] <- TRUE

标签: r


【解决方案1】:
examp <- replace(rep(FALSE, 10), c(3, 8), TRUE)
examp
# [1] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE

基础R:

replace(examp, c(outer(c(1, -1), which(examp), '+')), TRUE)
# [1] FALSE  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE FALSE

使用data.table::shift

Reduce('|', data.table::shift(examp, -1:1, fill = FALSE))
# [1] FALSE  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE FALSE

【讨论】:

    【解决方案2】:

    您可以像评论中提到的那样做,但据我了解,您希望 TRUE 值周围的两个值也转换为 TRUE。所以你只需要做两次。

    我的建议是使用矢量的 laglead 版本以及 or 操作:

    v = c(
        F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, T, F, T,
        F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, T, T, F, F,
        F, F, F, F, F, F, F, T, T, F, F, F, F, T, T, T, T, F, F, 
        F, F, F, F, F, T, T, F, F, F, F, F, F, F, F, F, F, T, T,
        T, T
    )
    
    l = length(v)
    
    v = v | c(v[-1], F) | c(F, v[-l])
    v = v | c(v[-1], F) | c(F, v[-l])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      相关资源
      最近更新 更多