【问题标题】:R - Creating for loop replacing negative values for random integers, and counting negative valuesR - 创建for循环替换随机整数的负值,并计算负值
【发布时间】:2020-12-16 04:44:09
【问题描述】:

创建一个 for 循环,用 1 到 10 之间的随机整数替换数字矩阵中的负值。同时,它计算负值并打印它们的数量。

我在第一部分尝试这样做,但没有成功。

有人可以帮忙吗?

谢谢

【问题讨论】:

  • 欢迎堆栈溢出。请看一下这个How to Ask。您还应该在此处发布您迄今为止尝试过的代码,以便我们更好地了解导致错误的原因。

标签: r


【解决方案1】:

你可以试试下面的代码

print(sum(mat<0))
replace(mat,mat<0,sample(1:10,sum(mat<0),replace = TRUE))

或嵌套for循环

for (i in 1:nrow(mat)) {
  for (j in 1:ncol(mat)) {
    if (mat[i,j]<0) {
      mat[i,j] <- sample(1:10,1)
    }
  }
}

示例

set.seed(1)
mat <- matrix(rnorm(15),3,5)
> mat
           [,1]       [,2]      [,3]       [,4]       [,5]
[1,] -0.6264538  1.5952808 0.4874291 -0.3053884 -0.6212406
[2,]  0.1836433  0.3295078 0.7383247  1.5117812 -2.2146999
[3,] -0.8356286 -0.8204684 0.5757814  0.3898432  1.1249309

> print(sum(mat<0))
[1] 6

> replace(mat,mat<0,sample(1:10,sum(mat<0),replace = TRUE))
           [,1]      [,2]      [,3]      [,4]     [,5]
[1,] 10.0000000 1.5952808 0.4874291 4.0000000 3.000000
[2,]  0.1836433 0.3295078 0.7383247 1.5117812 6.000000
[3,]  9.0000000 1.0000000 0.5757814 0.3898432 1.124931

【讨论】:

    【解决方案2】:

    类似的东西

    # sample data
    mat = matrix(data = sample(-10:10, size=40, replace = T), nrow = 5)
    print(mat)
    
    # count of negative values
    print(length(mat[mat < 1]))
    
    # replace negative by random int
    mat[mat < 1] = sample(1:10, size=1)
    

    【讨论】:

      猜你喜欢
      • 2017-06-14
      • 2019-10-29
      • 1970-01-01
      • 2021-01-19
      • 2018-10-09
      • 2018-11-22
      • 1970-01-01
      • 1970-01-01
      • 2023-02-07
      相关资源
      最近更新 更多