gpt4 book ai didi

r - 如何从向量或列表中消除 n 个连续值?

转载 作者:行者123 更新时间:2023-12-04 10:48:20 26 4
gpt4 key购买 nike

假设我有:

v <- c(1,2,0,0,0,3,4,4,4,0,0,0,0,5,0)
v
[1] 1 2 0 0 0 3 4 4 4 0 0 0 0 5 0

我想消除连续 0 的数量为 2+(2 或更多)的任何连续 0。所以上面的例子会变成:

1 2 3 4 4 4 5 0

NOTE: I would prefer a base-R solution but other solutions would be interesting

最佳答案

1) na.locf0 这个使用zoo包但是只有一行代码。它利用 na.locf0 中的 maxgap 参数。用 NA 替换每个 0,用 0 替换其他所有内容。使用 na.locf0maxgap 来填充它,将其添加到原始向量中,然后应用 na。省略来移除NAs并使用c来移除属性。

library(zoo)

c(na.omit(na.locf0(ifelse(v == 0, NA, 0), maxgap = 1) + v))
## [1] 1 2 3 4 4 4 5 0

2) rleid 这使用了 data.table 中的 rleid。它比(1)长一点,但仍然相当短。它使用 rleid 对数据进行分组,然后为每个组生成一个 NA 或在最后删除 NA 的原始数据。

library(data.table)

fun <- function(x) if (x[1] == 0 & length(x) > 1) NA else x
c(na.omit(ave(v, rleid(v), FUN = fun)))
## [1] 1 2 3 4 4 4 5 0

关于r - 如何从向量或列表中消除 n 个连续值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57396857/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com