考虑到 R 中列表中的前一个值,如何替换一个值?
Posted
技术标签:
【中文标题】考虑到 R 中列表中的前一个值,如何替换一个值?【英文标题】:How do I replace a value taking into account the previous value from a list in R? 【发布时间】:2022-01-14 12:15:53 【问题描述】:我正在尝试用零值替换零之后的所有值。
列表是这样的:
x <- c(1,1,0,1,1,1,1,1,0,1,1)
我希望输出是这样的:
c(1,1,0,0,1,1,1,1,0,0,1)
所以,0之后的下一个值也是0。
我已经用循环完成了,但是因为它有大量的信息,所以要等待很多时间。 我希望有人能给我一个想法。
【问题讨论】:
【参考方案1】:x[ c(FALSE, x[-length(x)] == 0) ] <- 0
x
# [1] 1 1 0 0 1 1 1 1 0 0 1
identical(
x,
c(1,1,0,0,1,1,1,1,0,0,1) # from the OP
)
# [1] TRUE
【讨论】:
在我看来,我发布了一个与您的解决方案相当相似的解决方案。如果你愿意,我可以删除它:) 我认为它们足够相似,我不介意。你的略有不同,虽然我想不出which(.)
在功能上或多或少地对数据中的某些内容具有弹性,但我认为它们都有一些价值。你的胜利是代码高尔夫和简单/可读性,所以我赞成:-)
which()
在功能上没有弹性时,您介意详细说明吗?
在某些情况下(在此 [
使用之外)条件必须具有非零长度,然后 which(.)
可以返回长度 0。这与 grep
与 @ 的讨论相同987654327@。但是,正如我所说,我无法想到在这种使用中which
会有任何不同(更好或更坏)的处理/弹性,所以......它有效。它们不是相同的答案,所以我认为保持两者都有价值。我认为你的可能在很多方面都更好。
感谢您的详细说明,向更有经验的人学习总是很棒:)【参考方案2】:
你可以这样做:
x[which(x == 0) + 1] <- 0
[1] 1 1 0 0 1 1 1 1 0 0 1
【讨论】:
以上是关于考虑到 R 中列表中的前一个值,如何替换一个值?的主要内容,如果未能解决你的问题,请参考以下文章
python如何替换array(x,n)中每个x的第一个f(x)值
在 R 中,通过在嵌套列表中用 NA 替换 NULL 来防止 unlist 删除 NULL 值