操纵data.frame或matrix中的某些值

时间:2013-06-27 06:41:29

标签: r dataframe data-manipulation

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

感谢您的帮助。

1 个答案:

答案 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,则会破坏的极端情况。但这是你问题中的一个极端情况而不仅仅是这个代码。