2017-11-12 12 views
1

私は32列と約23000行からなるmy.data行列を持っています。 I 10と20列からの細胞の特定の値を抽出したいので、私は、forループを使用:"subscript out of bounds"エラーなしに行列セルから値を抽出する方法はありますか?

for (i in 1:nrow(my.data)) { 
    day <- as.numeric(my.data[i,10]) 
    night <- as.numeric(my.data[i,20]) 
    sum <- day+night 
    if (sum > 2200) { 
    my.data <- my.data [-i,] 
    } 
} 

が、「my.dataにおけるエラー[I]、[10]:添字範囲外」が示されています。何が間違っているか私に説明できますか?ありがとうございました!

答えて

0

負のインデックスによって要素が削除されるため、my.dataの行列は小さくなりますが、iは元のデータに存在するすべての行にアクセスしようとします。

> matrix(1:9, 3,3) 
    [,1] [,2] [,3] 
[1,] 1 4 7 
[2,] 2 5 8 
[3,] 3 6 9 
> matrix(1:9, 3,3)[-1,] 
    [,1] [,2] [,3] 
[1,] 2 5 8 
[2,] 3 6 9 
> x <- matrix(1:9, 3,3) 
> x 
    [,1] [,2] [,3] 
[1,] 1 4 7 
[2,] 2 5 8 
[3,] 3 6 9 
> x[-1, ] 
    [,1] [,2] [,3] 
[1,] 2 5 8 
[2,] 3 6 9 
> 

試してみてください。

i <- 1 
while (i <= nrow(my.data)) { 
    day <- as.numeric(my.data[i,10]) 
    night <- as.numeric(my.data[i,20]) 
    sum <- day+night 
    if (sum > 2200) { 
    my.data <- my.data [-i,] 
    } 
    i <- i + 1 
} 

UPDATE: または溶液のようなR複数使用します。

row_idx <- (as.numeric(my.data[, 10]) + 
      as.numeric(my.data[, 20])) <= 2200 
my.data <- my.data[row_idx, ] 
関連する問題