小编Mic*_*leL的帖子

如何返回满足特定条件的向量中的最后一个值

我有一个向量(在数据框中)充满了越来越多的数字.我想找到所有连续的数字,并用系列中的第一个数字替换它们.这可能没有循环吗?

我的输入数据是:

V1
1
4
5
7
10
15
16
17
20
Run Code Online (Sandbox Code Playgroud)

我想输出的是:

V1    Out
1     1
4     4
5     4
7     7
10    10
15    15
16    15
17    15
20    20
Run Code Online (Sandbox Code Playgroud)

到目前为止,我设法使用diff()计算两行之间的差异,并通过向量循环来替换正确的值.

V1 <- c(1, 4, 5, 7, 10, 15, 16, 17, 20)
df <- data.frame(V1)
df$diff <- c(0, diff(df$V1) == 1)
df$Out <- NA
for (j in 1:(nrow(df))){
    if (df$diff[j] == 0){
        df$Out[j] <- df$V1[j]
    } else {
        df$Out[j] <- df$V1[max(which(df$diff[1:j] == 0))]
    }
}
Run Code Online (Sandbox Code Playgroud)

它完成了这项工作,但效率非常低.有没有办法摆脱循环并使这段代码快速?

非常感谢你!

r

4
推荐指数
3
解决办法
129
查看次数

标签 统计

r ×1