gpt4 book ai didi

r - 当前值不为 1 时,用前值代替当前值,直到在 R 中找到下一个非 1 值

转载 作者:行者123 更新时间:2023-12-04 17:20:41 25 4
gpt4 key购买 nike

输入向量如下,data=c(1,1,1,1,11,1,1,1,1,12,1,1,2,1,1,1)

我希望输出为 1,1,1,1,11,11,11,11,11,12,12,12,2,2,2,2 其中 1 继续非 1 应该归因于 R 中的非 1 值。

我试过下面的代码

data=c(1,1,1,1,11,1,1,1,1,12,1,1,2,1,1,1)
sapply(data, function(x) ifelse (lag(x)!=1,lag(x),x))

但它没有产生预期的输出

最佳答案

您可以将第一个非 1 值之后的每个 1 转换为 NA,然后使用 zoo::na.locf():

library(zoo)

x <- c(1,1,1,1,11,1,1,1,1,12,1,1,2,1,1,1)

data[seq_along(x) > which.max(x!= 1) & x== 1] <- NA
na.locf(x)

[1] 1 1 1 1 11 11 11 11 11 12 12 12 2 2 2 2

或者使用 replace() 添加 NA 值:

na.locf(replace(x, seq_along(x) > which.max(x != 1) & x == 1, NA))

为了回应您关于将其应用于群组的评论,您可以使用 ave():

df <- data.frame(x = c(x, rev(x)), grp = rep(1:2, each = length(x)))

ave(df$x, df$grp, FUN = function(y)
na.locf(replace(y, seq_along(y) > which.max(y != 1) & y == 1, NA))
)

关于r - 当前值不为 1 时,用前值代替当前值,直到在 R 中找到下一个非 1 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60635343/

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