r - 不知道如何将其变成 R 中的 for 循环
问题描述
我正在寻找一种更优雅的编码方式,包括 for 循环。我不想单独索引电子表格的每一列,因为最终我想要一个更大的“tsf”矩阵。
有人对如何做到这一点有任何想法吗?
编辑:重要的部分是如果treat = 0,那么该行应该= 0;如果treat = 1,那么该行应该有一个重复的0-5序列
I <- 50
T <- 10
treat <- round(runif(I,0,1))
tsf <- matrix(NA, I, T) #if treat = 0, then all rows should = 0; if treat = 1, then all rows should have a sequence of 0-5 that repeats until the end of the row
tsf[,1] <- ifelse(treat > 0, 0, round(runif(I,0,5)))
tsf[,2] <- ifelse(tsf[,1]>0 & tsf[,1]<5, tsf[,1]+1, 0)
tsf[,3] <- ifelse(tsf[,1]!=0 & tsf[,2]<5, tsf[,2]+1, 0)
tsf[,4] <- ifelse(tsf[,1]!=0 & tsf[,3]<5, tsf[,3]+1, 0)
tsf[,5] <- ifelse(tsf[,1]!=0 & tsf[,4]<5, tsf[,4]+1, 0)
tsf[,6] <- ifelse(tsf[,1]!=0 & tsf[,5]<5, tsf[,5]+1, 0)
tsf[,7] <- ifelse(tsf[,1]!=0 & tsf[,6]<5, tsf[,6]+1, 0)
tsf[,8] <- ifelse(tsf[,1]!=0 & tsf[,7]<5, tsf[,7]+1, 0)
tsf[,9] <- ifelse(tsf[,1]!=0 & tsf[,8]<5, tsf[,8]+1, 0)
tsf[,10] <- ifelse(tsf[,1]!=0 & tsf[,9]<5, tsf[,9]+1, 0)
解决方案
我想你有一个错字,即i
应该是1
。下面可能是for
您的循环选项
tsf[,1] <- ifelse(treat > 0, 0, round(runif(I,0,5)))
for (k in 2:10) {
tsf[,k] <- ifelse(tsf[,1]>0 & tsf[,k-1]<5, tsf[,k-1]+1, 0)
}
推荐阅读
- php - Laravel Entrust Permissions 禁用文本输入
- cmake - 如何在cmake中将变量从父项目传递到子项目
- php - 如何加入 Laravel 获取数据?
- git - “立即构建”是否有可能运行特定分支或多个分支?
- list - 在 Racket 中将简单列表与带有子列表的列表进行比较
- javascript - Canvas + Angular 5 requestAnimationFrame 崩溃
- r - 从子集数据计算的向量中的值位置
- c# - 在数据网格记录项目wpf中禁用焦点
- xamarin.forms - VSTS、Xamarin Forms、Net Standard、Android:我调用 restore 时找不到 project.assets.json
- c# - System.LINQ 双内连接?