在data.frame或matrix中操作某些值

在data.frame或matrix中操作某些值,r,dataframe,data-manipulation,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

我使用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列中的更改):

谢谢你的帮助。

试试这个:

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

new.df在转置后,您没有data.frame,而是矩阵。您能给我一个提示,如果没有最后一个条件“即使值再次上升到1以上,也应该持续”,解决方案是什么吗?一个将导致以下结果:因此对于列4,应该提供值:44,34,12,12,6
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
               })