0

我使用 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

我的目标是在出现 "value less 1"时用最后一个可用的 "value Greater 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

谢谢你的帮助。

4

1 回答 1

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
               })

如果列中的第一个值小于一个,这将打破的极端情况。但这是您问题中的一个极端案例,而不仅仅是这段代码。

于 2013-06-27T06:46:35.687 回答