【问题标题】:R change value to anotherR 将值更改为另一个
【发布时间】:2017-09-02 11:06:09
【问题描述】:

我有以下向量:

a <- c(TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, NA, FALSE)

我想将 FALSE 更改为 TRUE 仅当最多有 n FALSE 值彼此相邻时。否则,不应更改这些值。 比如n = 2时,我想获取:

c(TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, NA, TRUE).

这个问题的最佳解决方案是什么?

【问题讨论】:

  • rle()inverse.rle() 可以提供帮助

标签: r vector replace


【解决方案1】:

rle()inverse.rle() 可以提供帮助:

a <- c(TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, NA, FALSE)
r <- rle(a)
r$values[r$values==FALSE & r$lengths<=2] <- TRUE
inverse.rle(r)
# > inverse.rle(r)
# [1]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE  TRUE    NA  TRUE

【讨论】:

    【解决方案2】:

    我们也可以使用data.table中的rleid

    library(data.table)
    a[data.table(a)[, .I[all(!a) & .N <= 2],rleid(a)]$V1] <- TRUE
    a
    #[1]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE  TRUE    NA  TRUE
    

    【讨论】:

      猜你喜欢
      • 2021-10-25
      • 1970-01-01
      • 2021-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-25
      相关资源
      最近更新 更多