0

我有一个矩阵

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

一种简单的方法是使用双 for 循环遍历整个事物,但这在 R 中将花费很长时间。还有比循环更好的过程吗?我知道在大多数情况下,不会有一个单一的答案。

我正在考虑使用 na.locf() 但这仅适用于 NA。如果满足某些条件,是否具有结转价值的功能?

4

1 回答 1

1

这是一种方法:

apply(mat, 2, function(col) 
      replace(col, seq(col) > which.max(col!=272), col[which.max(col!=272)]))
于 2013-05-16T15:37:58.400 回答