我使用R。
跟随问题让我们假设我在这个结构中有一个data.frame(或矩阵):
t(data.frame(
"t1"=c(NA,NA,23,44),
"t2"=c(16,14,26,34),
"t3"=c(17,6,40,12),
"t4"=c(21,0.8,41,0.25),
"t5"=c(23,0.2,43,6)))
导致以下data.frame:
[,1] [,2] [,3] [,4]
t1 NA NA 23 44.00
t2 16 14.0 26 34.00
t3 17 6.0 40 12.00
t4 21 0.8 41 0.25
t5 23 0.2 43 6.00
我的目标是替换每列中的值,当出现“值小于1”时,最后一个可用“值大于1”。即使价值再次超过1,这也应该持续。
查看所需的结构(第2栏和第3栏的更改):
[,1] [,2] [,3] [,4]
t1 NA NA 23 44.00
t2 16 14.0 26 34.00
t3 17 6.0 40 12.00
t4 21 6.0 41 12.00
t5 23 6.0 43 12.00
感谢您的帮助。
答案 0 :(得分:1)
试试这个:
new.df <- apply(old.df, 2,
function (k) {
first <- which(k < 1)
if (length(first) == 0) return(k)
first <- first[[1]]
k[first:nrow(old.df)] <- k[[first - 1]]
k
})
如果列中的第一个值小于1,则会破坏的极端情况。但这是你问题中的一个极端情况而不仅仅是这个代码。