2017-06-01 125 views
0

我有一个数据表,我希望通过为同一列分配前一行的正值来交换负值。为前:在R数据表中将前一列值交换为负值

1 2 3 4 
2 -3 -2 3 

应该

1 2 3 4 
2 2 3 3 

谢谢!

+0

这是一个data.table,数据框架或矩阵? –

+0

这是一个data.table – Gal

+0

你可以分享'dput(head(yourtable))',以便我们有一个可重现的前几行的例子吗?另外,如果连续存在多个负值,会发生什么? –

回答

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对象dtchangeMat(as.matrix(dt))将正常工作。

无论如何,我敢肯定,必须有更聪明的方式...