有条件的价值传播

时间:2013-05-16 15:30:25

标签: r

我有一个矩阵

mat<-matrix(c(272,237,266,272,225,265,117,223,262,241,210,216,252,203,170),nrow=5,ncol=3,byrow=T)

     [,1] [,2] [,3]
[1,]  272  237  266
[2,]  272  225  265
[3,]  117  223  262
[4,]  241  210  216
[5,]  252  203  170

有没有办法让第N列中的第一个元素不等于272,其余行等于第N列中的那个数字?如果它等于272,我将需要搜索跳到不等于272的行然后执行相同的操作并让它向下传播?

上面的数据框中的一个例子将转向:

     [,1] [,2] [,3]
[1,]  272  237  266
[2,]  272  237  266
[3,]  117  237  266
[4,]  117  237  266
[5,]  117  237  266

一个简单的方法是使用double for循环遍历整个事物,但这将永远在R中。是否有更好的过程然后循环?据我所知,在大多数情况下,不会有一线答案。

我正在考虑使用na.locf(),但这仅适用于NAs。如果符合某些条件,是否有向前推进价值的功能?

1 个答案:

答案 0 :(得分:1)

这是一种方式:

apply(mat, 2, function(col) 
      replace(col, seq(col) > which.max(col!=272), col[which.max(col!=272)]))