【问题标题】:R replacing zeros in dataframe with next non zero valueR用下一个非零值替换数据帧中的零
【发布时间】:2019-03-24 19:16:37
【问题描述】:

我有一个包含零值列的数据框:

a <- 1:10
b <- c(1, 0, 0, 0, 0, -1, -1, 0, 0, 1)
df <- data.frame(a, b)
df

如何将零值替换为最后一个非零值,即列 df$b 为:

 1,-1,-1,-1,-1,-1,-1,1,1,1

感谢您的帮助。

【问题讨论】:

    标签: r replace


    【解决方案1】:

    这是na.locf 来自zoo 的一种方式。虽然这个方法在这个过程中确实将一些值更改为NA,但代码很好,很轻松。

    library(zoo)
    na.locf(with(df, ifelse(b == 0, NA_real_, b)), fromLast = TRUE)
    # [1]  1 -1 -1 -1 -1 -1 -1  1  1  1
    

    对此的替代方法是

    na.locf(with(df, { is.na(b) <- b == 0; b }), fromLast = TRUE)
    # [1]  1 -1 -1 -1 -1 -1 -1  1  1  1
    

    【讨论】:

    • 还有另一个变体:na.locf(with(df, replace(b,b==0,NA)), fromLast = TRUE)
    猜你喜欢
    • 2019-04-05
    • 2015-12-19
    • 2018-01-23
    • 1970-01-01
    • 1970-01-01
    • 2016-03-06
    • 2015-08-24
    • 2022-01-23
    • 2018-01-05
    相关资源
    最近更新 更多