使用前一列值在R数据表中交换负值

时间:2017-06-01 20:03:09

标签: r matrix

我有一个数据表,我希望通过为负值分配相同列的前一行中的正值。例如:

1 2 3 4
2 -3 -2 3

应该是

1 2 3 4
2 2 3 3

谢谢!

1 个答案:

答案 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))是否正常工作。

无论如何,我很确定必须有更明智的方式......