r - R滚动减法矢量化替代for循环
问题描述
Leaves<- c(2,4,6,7,8,10,11,15)
ax<- c(2,1,1,2,3,1,1,1)
bx <- c(0,0,0,0,2,0,0,1)
mydata<- data.frame(Leaves, ax, bx)
Sx<- c()
Sx[1] <- sum(x$ax)
for(i in 2:length(mydata$Leaves)){
Sx[i] <- Sx[i-1] - mydata$ax[i-1]
}
这里发生的事情是我希望 Sx 列的第一个值是 ax 列的总和。Sx 的第二个值应该是 Sx[1]-ax[1],Sx 的第三个值应该是 Sx[2]-ax[2,依此类推。
这段代码现在可以工作,但它是一个 for 循环。有谁知道一种方法可以对此 for 循环进行矢量化替代?我已经研究了很多 Dplyr lag 和 data.table shift 函数,但我不确定如何让它们工作。
解决方案
矢量化方式是:
mydata$Sx <- sum(mydata$ax) - cumsum(mydata$ax) + mydata$ax
mydata
# Leaves ax bx Sx
#1 2 2 0 12
#2 4 1 0 10
#3 6 1 0 9
#4 7 2 0 8
#5 8 3 2 6
#6 10 1 0 3
#7 11 1 0 2
#8 15 1 1 1
推荐阅读
- pdf - safari iframe 中的“application/pdf”blob 不显示,但 blob url 在 safari 中的单独选项卡中工作
- reactjs - 如何在 Material-UI 中的每一行添加一个按钮?
- reactjs - 从父组件状态填充无状态子组件道具以在 React 中显示嵌套的无序列表(使用 Firebase)
- tsql - 方法 sp_OAGetProperty 执行时不返回值
- php - 如何在使用 snappy twig (Symfony 4) 创建的 pdf 中创建没有边距的标题?
- hyperledger-fabric - 我如何识别 MVCC Aboard?
- firebase - 计划的云函数 Firebase
- nswindow - 寻找如何以编程方式在 NSWindow 中显示文本的示例?
- javascript - 使用 React-snap 预渲染 React 应用程序的问题
- javascript - 我可以将数据从一个 JSON 文件导入到另一个 JSON 文件吗?