我知道已經發布了很多問題,但我無法將解決方案應用於我的問題。如果條件滿足,則跳到下一行,然後再檢查另一個條件
我有一個包含許多行和列的數據集。下面是一個示例:
V7 V8 V9
0 1 0
-1 1 -1
-1 1 -1
-1 0 -1
-1 0 -1
-1 0 -1
-1 0 -1
-1 1 -1
0 1 -1
0 1 -1
-1 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 -1 0
0 -1 -1
0 0 0
0 1 0
0 0 0
該數據被保存在一個矩陣trboot3
我想要做的就是創建一個循環,其中兩個條件檢查和數據被改變。
- 如果有零,則跳至下一行。
- 如果一行中的第一個數字相同,則保留第一個數字並將其餘數字改爲零。
這裏是我上面的循環代碼:
trboot4<-trboot3
valboot<-length(trboot3[,1])
for (k in 1:length(trboot3[1,])){
for (i in 2:valboot-1){
if (trboot3[k,i]==0) {i<-i+1}
else{
if(trboot3[k,i] == trboot3[k,i+1]){
for (j in i+1:valboot){ if(trboot3[k,j] == trboot3[k,i]){trboot4[k,j]<-0}else{break}
if(j==valboot){break}
}
}
}
}
}
我要保存新的矩陣trboot4
基本上上面的示例應該變成:
V7 V8 V9
0 1 0
-1 0 -1
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 1 0
0 0 0
0 0 0
-1 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 -1 0
0 0 -1
0 0 0
0 1 0
0 0 0
是否電流回路工作?如果有效,它是否太慢? – digEmAll
嗨@digEmAll除當前循環的'下標越界外'沒有錯誤。但是我的trboot4輸出與trboot3相同。不,至少對我來說不是很慢。 – miababy
我已經提供了一個不使用循環的解決方案,順便說一句,你可以使用nrow和ncol函數來獲得矩陣的行數和列數,你不需要這樣做:'length(m [,1])'etc ... – digEmAll