【问题标题】:how to elegantly substitute repeated values with a different vector? [closed]如何优雅地用不同的向量替换重复值? [关闭]
【发布时间】:2017-09-26 07:22:50
【问题描述】:

在 R 中,这样的向量:

x <- c(0,0,1,1,0,0,1,1,0,0,1,1,1,1,0,1,0,1,0,1)

我希望 x 是这样的:

y = c(0,0,1,1,0,0,2,2,0,0,3,3,3,3,0,4,0,5,0,6)

谁能帮我解决这个问题?

【问题讨论】:

    标签: r gsub


    【解决方案1】:

    一个选项是rle

    inverse.rle(within.list(rle(x), values[values!=0] <- seq_along(values[values!=0])))
    #[1] 0 0 1 1 0 0 2 2 0 0 3 3 3 3 0 4 0 5 0 6
    

    或与rleid 来自data.table

    library(data.table)
    x1 <- x*rleid(x)
    match(x1, unique(x1[x1!=0]), nomatch = 0)
    #[1] 0 0 1 1 0 0 2 2 0 0 3 3 3 3 0 4 0 5 0 6
    

    【讨论】:

    • 第二个解决方案很好。没想到这么用match。
    猜你喜欢
    • 2015-06-25
    • 2014-12-01
    • 2014-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    • 2010-11-04
    相关资源
    最近更新 更多