R中倒序累加-By自定义函数

副标题:倒序求和

正序求和代码是cumsum()

什么是倒序累加?

例如我们有一个矩阵MM.Matrix,我们想要实现的目标是如下第二个矩阵

它的数学表达式是:

 \left[\begin{array}{lll}2+5+1 & 5+1 & 1 \\ 4+6+2 & 6+2 & 2 \\ 3+3+4 & 3+4 & 4\end{array}\right]

实现步骤:

Step1:

rev一下data.frame(矩阵),获得一个数据框

因为rev作用在data.frame上与作用在矩阵上的效果完全不同。rev作用在数据框上,将最后一列写在第一列,将倒数第二列写在第二列。

\left[\begin{array}{lll} 1 & 5 & 2 \\ 2 & 6 & 4 \\ 4 & 3 & 3 \end{array}\right]

Step2:

转置,获得一个矩阵

\left[\begin{array}{lll} 1 & 2 & 4 \\ 5 & 6 & 3 \\ 2 & 4 & 3 \end{array}\right]

Step3:

累加函数cumsum作用于数据框上,即cumsum(as.data.frame()),获得一个数据框

因为cumsum函数作用于数据框上和作用于矩阵上的效果完全不一样。

\left[\begin{array}{ccc} 1 & 2 & 4 \\ 1+5 . & 2+6 & 4+3 \\ 1+5+2 & 2+6+4 & 4+3+3 \end{array}\right]=\left[\begin{array}{ccc} 1 & 2 & 4 \\ 6 & 8 & 7 \\ 8 & 12 & 10 \end{array}\right]

Step4:

转置,获得一个矩阵,

\left[\begin{array}{lll} 1 & 6 & 8 \\ 2 & 8 & 12 \\ 4 & 7& 10 \end{array}\right]

Step5:

使用rev函数作用于数据框上,即rev(as.data.frame()),获得一个数据框

\left[\begin{array}{lll} 8 & 6 & 1 \\ 12 & 8 & 2 \\ 10 & 7 & 4 \end{array}\right]

-----至此,我们可以将上述步骤总结起来,写成一个R自定义函数,便于使用。

将上述代码编写成一个函数:

倒序累加求和:reverse accumulation,在R中累加求和的函数是cumsum,倒序的函数是rev,函数function一词的简写fun,这个是函数名字的由来。

                # 编写成一个函数
                #input matrix
                #output matrix
                rev.cumsum.fun <- function(Matrix){
                        rev.ENij <- rev(as.data.frame(Matrix))
                        t.rev.ENij <- t(rev.ENij)
                        cumsum.ENij <- cumsum(data.frame(t.rev.ENij))
                        t.ENij <- t(cumsum.ENij)
                        Finish <- rev(as.data.frame(t.ENij))
                        names(Finish) <- NULL#有什么用呢?
                        Finish.matrix <- data.matrix(Finish)
                        return(Finish.matrix)
                }
                

注意:这个代码中names(Finish)<-NULL只是消除掉了数据框中名字,或许这一行是否删掉意义不大,后续如果我想明白了,会进行补充。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值