【问题标题】:Swap a negative value in an R data table with the previous column value将 R 数据表中的负值与前一列值交换
【发布时间】:2017-06-01 20:03:08
【问题描述】:

我有一个数据表,我想通过在同一列的前一行中为它们分配正值来交换负值。例如:

1 2 3 4
2 -3 -2 3

应该是

1 2 3 4
2 2 3 3

谢谢!

【问题讨论】:

  • 这是data.table、数据框还是矩阵?
  • 这是一个data.table
  • 您能否分享dput(head(yourtable)) 以便我们获得前几行的可重现示例?还有,如果连续有多个负值怎么办?
  • 这是一张巨大的桌子。我不介意分享,但它只是 180 列乘 5000 行的数字。我忘记提到的假设是第一个值将始终为正,因此递归地解决了这个问题。
  • dput(head(yourtable)) 将只包括前六行。

标签: r matrix


【解决方案1】:

由于没有来自更有经验的人的答案,这就是我想出的。

# 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)) 可以正常工作。

无论如何,我很确定一定有更聪明的方法......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-10
    • 2017-08-22
    • 2015-10-18
    • 2012-06-19
    • 2022-01-14
    相关资源
    最近更新 更多