我有一个数据表,我希望通过为负值分配相同列的前一行中的正值。例如:
1 2 3 4
2 -3 -2 3
应该是
1 2 3 4
2 2 3 3
谢谢!
答案 0 :(得分:0)
由于没有经验丰富的家伙的回答,这就是我想出来的。
# I'm reconstructing your example:
n <- matrix(c(1, 2, 2, -3, 3, -2, 4, 3), nrow = 2)
n
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 2 -3 -2 3
changeMat <- function(mat) {
new_mat <- mat
for(i in 1:length(mat))
ifelse(mat[i] < 0, new_mat[i] <- mat[i-1], new_mat[i] <- mat[i])
return(new_mat)
}
changeMat(n)
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 2 2 3 3
我检查了data.table
对象dt
changeMat(as.matrix(dt))
是否正常工作。
无论如何,我很确定必须有更明智的方式......