【问题标题】:R - Replace sequence values by its maximum in a columnR - 用列中的最大值替换序列值
【发布时间】:2021-05-16 04:00:04
【问题描述】:

我遇到了一个小问题,希望有人能帮助我。

我有一个这样的数据框:

df <- data.frame(foo = 1:20, bar = c(0,0,1,0,0,0,1,2,0,0,1,2,3,0,0,0,1,2,3,4))

还有什么会得到这样的结果:

df_result <-  data.frame(foo = 1:20, bar = c(0,0,1,0,0,0,2,2,0,0,3,3,3,0,0,0,4,4,4,4))

如何在不使用 while 循环的情况下执行此操作?

【问题讨论】:

  • 看看?rle
  • @markus 旁注:您的解决方案在更大的向量上大约快 10 倍(例如 bar = unlist(sample(lapply(1:10, function(x) sequence(x) - 1), 1e6, replace = TRUE))。当然我们假设 连续 整数序列,如 OP 所示。

标签: r loops while-loop


【解决方案1】:

在基础 R 中使用 ave

with(df, as.integer(bar > 0) * (ave(bar, cumsum(bar == 0), FUN = max)))
#[1] 0 0 1 0 0 0 2 2 0 0 3 3 3 0 0 0 4 4 4 4

其中cumsum(bar == 0)用于创建组,ave用于计算每个组中的maxas.integer(bar &gt; 0)用于保持0为0的值。

【讨论】:

    猜你喜欢
    • 2014-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 2021-10-11
    • 1970-01-01
    • 2014-02-24
    • 1970-01-01
    相关资源
    最近更新 更多