考虑到 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 中列表中的前一个值,如何替换一个值?的主要内容,如果未能解决你的问题,请参考以下文章

R:用第二个列表元素的值替换一个列表元素的值

python如何替换array(x,n)中每个x的第一个f(x)值

在 R 中,通过在嵌套列表中用 NA 替换 NULL 来防止 unlist 删除 NULL 值

用列表 Pyspark Dataframe 中的值替换 NA

用R中的另一个值替换数据框多列中出现的数字

如何填充(自动填充)值,例如使用 R 中的 data.table 将 NA 替换为组中的第一个值?