我有一个向量(在数据框中)充满了越来越多的数字.我想找到所有连续的数字,并用系列中的第一个数字替换它们.这可能没有循环吗?
我的输入数据是:
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 ×1