我有一个矩阵
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。如果符合某些条件,是否有向前推进价值的功能?
答案 0 :(得分:1)
这是一种方式:
apply(mat, 2, function(col)
replace(col, seq(col) > which.max(col!=272), col[which.max(col!=272)]))