r - 在 R 中满足条件时如何转换矩阵中的值?
问题描述
我有一个 40x18 矩阵。我想要做的是检查(for循环)这个矩阵中的每个值“x”,然后如果> = 0,x应该转换为x ^ alpha。如果 x<0,则以 -lamda*(-x)^beta 的方式对其进行变换。
最后,我想要一个带有变压器值的新矩阵。
我试过这种方式,但它不起作用。任何人都可以帮忙吗?
这是我的部分数据:
V1 = c(-0.0488238351305964, -0.0365464622704548, -0.023110113947345, -0.00936478818716672, -0.0014143836369377, 0.0136298911422536),
V2 = c(-0.0440798156253931, -0.0290469503666371, -0.0184194158583475,-0.00659023901355601, 0.0104814403440645,
0.02050543245721), df[1:40,18)
V3 = c(-0.0500446221600135, -0.0310561032780763, -0.0202547384070556, -0.00900829333252385, 0.0179628052483861, 0.024328936936393))
这是我测试的部分代码
for (h in 1:18) {
if df[,h] >= 0,
df1[,h] <- df[,h]^alpha` else df1[,h] <- df[,h]^beta`
}
解决方案
您不需要for
循环,您可以直接获取感兴趣的值mat
并替换它们:
V1 = c(-0.0488238351305964, -0.0365464622704548, -0.023110113947345, -0.00936478818716672, -0.0014143836369377, 0.0136298911422536)
V2 = c(-0.0440798156253931, -0.0290469503666371, -0.0184194158583475,-0.00659023901355601, 0.0104814403440645, 0.02050543245721)
V3 = c(-0.0500446221600135, -0.0310561032780763, -0.0202547384070556, -0.00900829333252385, 0.0179628052483861, 0.024328936936393)
mat <- matrix(c(V1,V2,V3), ncol = 3)
mat
#> [,1] [,2] [,3]
#> [1,] -0.048823835 -0.044079816 -0.050044622
#> [2,] -0.036546462 -0.029046950 -0.031056103
#> [3,] -0.023110114 -0.018419416 -0.020254738
#> [4,] -0.009364788 -0.006590239 -0.009008293
#> [5,] -0.001414384 0.010481440 0.017962805
#> [6,] 0.013629891 0.020505432 0.024328937
alpha <- 2
lambda <- 0.1
beta <- 0.9
mat[mat >= 0] <- (mat[mat>=0])^alpha
mat[mat < 0] <- -lambda * (-mat[mat < 0])^beta
mat
#> [,1] [,2] [,3]
#> [1,] -0.0066034167 -0.0060230406 -0.0067518327
#> [2,] -0.0050881606 -0.0041380000 -0.0043947307
#> [3,] -0.0033683862 -0.0027463018 -0.0029913965
#> [4,] -0.0014939916 -0.0010889578 -0.0014427074
#> [5,] -0.0002725904 0.0001098606 0.0003226624
#> [6,] 0.0001857739 0.0004204728 0.0005918972
由reprex 包于 2020-11-30 创建(v0.3.0)
此操作在示例数据上更具可读性:
mat2 <- matrix(1:9, nrow = 3)
mat2
#> [,1] [,2] [,3]
#> [1,] 1 4 7
#> [2,] 2 5 8
#> [3,] 3 6 9
mat2[mat2 >= 5] <- mat2[mat2 >= 5] + 1
mat2[mat2 < 5] <- mat2[mat2 < 5] - 1
mat2
#> [,1] [,2] [,3]
#> [1,] 0 3 8
#> [2,] 1 6 9
#> [3,] 2 7 10
由reprex 包于 2020-11-30 创建(v0.3.0)
推荐阅读
- scala - 如何从逗号分隔的字符串构建地图行?
- python-2.7 - 如何修复 pip 安装错误:'EnvironmentError: [Errno 42] Illegal byte sequence'?
- android - 所有方向的 4 个填充和只有 1 个填充有什么区别?
- tensorflow - 如何将冻结推理图或冻结推理图转换为 SavedModel
- node.js - 使用 nodejs 加密签名/验证总是错误的
- android - 如何获取 Spinner 的下拉箭头图像资源?
- installation - 服务人员不安装仅添加到主屏幕
- django - “用户”对象没有属性“soft_delete” - Django 软删除
- swift - 检查 Swift 中的泛型子类
- javascript - 如何从每次更新的 htm 或 xml 文件在网站上显示文本