首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:如何在矩阵中按行获取回报?

R:如何在矩阵中按行获取回报?
EN

Stack Overflow用户
提问于 2020-08-05 18:39:14
回答 2查看 123关注 0票数 0

首先,我用从1到10的随机数创建一个5x4矩阵:

代码语言:javascript
复制
A <- matrix(sample(1:10, 20, TRUE), 5, 4)
> A
     [,1] [,2] [,3] [,4]
[1,]    1    5    6    6
[2,]    5    9    9    4
[3,]   10    6    1    8
[4,]    4    4   10    2
[5,]   10    9    7    5

在接下来的步骤中,我希望获得各行的返回(对于第1行:(5-1)/1,(6-5)/5,(6-6)/6,以及其他行的相同过程)。因此,最终的矩阵应该是5x3矩阵。

EN

回答 2

Stack Overflow用户

发布于 2020-08-05 19:00:07

您可以使用应用于转置矩阵的Base R funtion diff()

代码:

代码语言:javascript
复制
# Data
set.seed(1)

A <- matrix(sample(1:10, 20, TRUE), 5, 4)

#     [,1] [,2] [,3] [,4]
#[1,]    9    7    5    9
#[2,]    4    2   10    5
#[3,]    7    3    6    5
#[4,]    1    1   10    9
#[5,]    2    5    7    9

# transpose so we get per row and not column returns 

t(diff(t(A))) / A[, -ncol(A)]

           [,1]       [,2]       [,3]
[1,] -0.2222222 -0.2857143  0.8000000
[2,] -0.5000000  4.0000000 -0.5000000
[3,] -0.5714286  1.0000000 -0.1666667
[4,]  0.0000000  9.0000000 -0.1000000
[5,]  1.5000000  0.4000000  0.2857143
票数 1
EN

Stack Overflow用户

发布于 2020-08-05 18:59:47

代码语言:javascript
复制
A <- matrix(sample(1:10, 20, TRUE), 5, 4)

fn.Calc <- function(a,b){(a-b)/a}
B <- matrix(NA, nrow(A), ncol(A)-1)
for (ir in 1:nrow(B)){
    for (ic in 1:ncol(B)){
        B[ir, ic] <- fn.Calc(A[ir, ic+1], A[ir, ic])
    }    
}

注意:当使用随机函数时,欢迎提供种子;)

所以我们这里有:fn.Calc只是你想要做的计算,我把它隔离在一个函数中,以便在需要时更容易修改

然后创建一个新的B矩阵,该矩阵具有比A少1列但是相同的行

最后,我们将循环这个B矩阵中的每个元素,我喜欢使用ir代表增量行,使用ic代表增量列,最后在循环内部(B[ir, ic] <- fn.Calc(A[ir, ic+1], A[ir, ic]))是魔术发生的时候,实际值被计算并存储在B中

这是一种非常基本的方法,不需要调用任何包,可能还有许多其他方法可以解决这个问题,需要的代码更少。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63263389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档