我的问题包括两个部分。我有一个矩阵,其 ID 和几列(代表时间)的值从 0 到 180。我想用子组来总结这些,然后在各个列之间进行比较。例如,有多少个 ID 从第 5 列的 0-10 切换到第 6 列的 11+?
现在,我的第一个想法是 SAS 风格的格式命令。这可以让我将整数分组到不同的块中(0-10、11-20、21-30 等)。但是,这似乎不存在。
我的解决方案是遍历这个矩阵的所有值(双 for 循环)并检查这些值是否落在特定范围(if 语句的字符串)之间,然后将此值输入到一个只跟踪类的新矩阵中。例子:
# search through columns
for (j in 2:(dim(Tab2)[2])){
# search through lines
for (i in 1:dim(Tab2)[1]){
if (is.na(Tab2[i,j])){
tempGliss[i,j] <- "NA"}
else if (Tab2[i,j]==0){
tempGliss[i,j] <- "Zero"}
else if (Tab2[i,j]>0 & Tab2[i,j]<=7){
tempGliss[i,j] <- "1-7"}
else if (Tab2[i,j]>=7 & Tab2[i,j]<=14){
tempGliss[i,j] <- "7-14"}
else if (Tab2[i,j]>=15 & Tab2[i,j]<=30){
tempGliss[i,j] <- "15-30"}
else if (Tab2[i,j]>=31 & Tab2[i,j]<=60){
tempGliss[i,j] <- "31-60"}
else if (Tab2[i,j]>=61 & Tab2[i,j]<=90){
tempGliss[i,j] <- "61-90"}
else if (Tab2[i,j]>=91 & Tab2[i,j]<=120){
tempGliss[i,j] <- "91-120"}
else if (Tab2[i,j]>=121 & Tab2[i,j]<=150){
tempGliss[i,j] <- "121-150"}
else if (Tab2[i,j]>=151 & Tab2[i,j]<=180){
tempGliss[i,j] <- "151-180"}
else if (Tab2[i,j]>180){
tempGliss[i,j] <- ">180"}
}
}
这里 Tab2 是我的原始矩阵,而 tempGliss 是我作为一个类创建的。这需要很长时间!我的文件很大,这无济于事。有什么办法可以加快速度吗?for 循环或 if 语句的替代方案?