如果满足条件,则更改数据帧的值,否则保持不变

时间:2021-07-21 12:06:31

标签: r dataframe for-loop matrix

我有一个 df ( my_df : n by m ) 和一个矩阵 ( my_mat : n by m )。
如果 my_mat[j,i] 不为零,我想更改 my_df[j,i] 的值,如果 my_mat[j,i] 为零,则保持原样。
然后我想在 grp 列中返回包含该行中最高值的 my_df 列的索引。

for(j in 1:nrow(my_df)){
  for(i in 1:nclo(my_df){
    if(my.mat[j,i]!=0)
      {my.df[j,i] <- (my.mat[j,i])/(crossprod(my.vec,my.mat[j,]))
    }

    my.df$grp[j] <- which.max(my.df[j,])
  }
}

我注意到,如果 my.mat[j,i] 为零,我的代码不会保留 my.df[j,i] 不变。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

如果 my_df[j,i] 为零,我无法观察到代码不会保持 my.mat[j,i] 不变。我删除了一些错误以便代码可以运行:

set.seed(42)
my.mat <- matrix(sample(0:9, 6), 2, 3)
my_df <- as.data.frame(my.mat)
my.vec <- 1:3

my_df[my.mat == 0]
#[1] 0

for(j in 1:nrow(my.mat)) {
  for(i in 1:ncol(my.mat)) {
    if(my.mat[j,i]!=0) {
      my_df[j,i] <- (my.mat[j,i])/(crossprod(my.vec,my.mat[j,]))
    }
    my_df$grp[j] <- which.max(my_df[j,])
  }
}

my_df[1:3][my.mat == 0]
#[1] 0