4

N という名前のこの疎行列があります。

4 x 4 sparse Matrix of class "dgCMatrix"
   C1 C2 C3 C4
V1  .  3  5  2
V2  .  5  1  .
V3  .  .  .  .
V4  .  .  4  .

欠損値が 2 つ以上ある行を削除しようとしています。私はこれで終わると思います:

   C1 C2 C3 C4
V1  .  3  5  2

私はこのコードを書きました:

    #iterate on rows and count: 
    #how many values in row ri are bigger than 0
    # if count is not bigger than limit, remove row ri
    limit = 3
    for(ri in 1:nrow(N)){
    count <- length(which(N[ri,]>0))
    if (count <limit){ 
        tmp <- paste("V",ri,sep="")
        rmv <- paste (rmv, tmp, sep= " ")       
    }
}

#now remove specific row names
N <- N[!rownames(N) %in% rmv, ]

問題は、最初のループで rmv が指定されておらず、エラーが発生するため、これが機能しないことです。

"object 'rmv' not found"

rmv を初期化するにはどうすればよいですか? 私が使用する場合:

rmv <- ""

次に、空のスペースで始まる文字列を取得します。次に例を示します。

> rmv
[1] " V2"

そして、私の最後の行は機能しません:

N <- N[!rownames(N) %in% rmv, ]

また、これは私がRで書いた最初のコードなので、基本的な概念に欠けている大きなものがあれば、ぜひ読んでみたいです(これには6時間かかり、stackoverflowで多くのことを読みましたさまざまな R チュートリアルがありますが、ここまで到達したことを誇りに思っています。これが私の最初の質問です)。

ありがとう!

4

2 に答える 2

3

あなたの疎行列が と呼ばれると仮定するとN、これはそれを行うはずです:

N[rowSums(as.matrix(N) == 0) < 2, ]

からのデータを含む小さな例?xtabs:

d.ergo <- data.frame(Type = paste0("T", rep(1:4, 9*4)),
Subj = gl(9, 4, 36*4))
set.seed(15) # a subset of cases:
N <- xtabs(~ Type + Subj, 
           data = d.ergo[sample(36, 10), ], 
           sparse = TRUE)
N
# 4 x 9 sparse Matrix of class "dgCMatrix"
#    1 2 3 4 5 6 7 8 9
# T1 . 1 . 1 . 1 . 1 .
# T2 1 . . . . . 1 . 1
# T3 . . . . 1 . . . .
# T4 1 . . . . . 1 . .
rowSums(as.matrix(N) == 0) ## How many missing
# T1 T2 T3 T4 
#  5  6  8  7 
## Let's remove any with more than 7 missing
N[rowSums(as.matrix(N) == 0) < 7, ]
# 2 x 9 sparse Matrix of class "dgCMatrix"
#    1 2 3 4 5 6 7 8 9
# T1 . 1 . 1 . 1 . 1 .
# T2 1 . . . . . 1 . 1
于 2013-08-12T11:39:05.540 に答える
2

大規模な疎行列では、行列の を操作する必要があります。summaryそうas.matrixしないと、メモリ不足になります。

library(Matrix)

M <- sparseMatrix(i = c(1, 1, 1, 2, 2, 4),
                  j = c(2, 3, 4, 2, 3, 2),
                  x = c(3, 5, 2, 5, 1, 4))

M[tabulate(summary(M)$i) > 2, , drop = FALSE]
# 1 x 4 sparse Matrix of class "dgCMatrix"
#             
# [1,] . 3 5 2

それがどのように機能するかを段階的に確認します。

summary(M)
# 4 x 4 sparse Matrix of class "dgCMatrix", with 6 entries 
#   i j x
# 1 1 2 3
# 2 2 2 5
# 3 4 2 4
# 4 1 3 5
# 5 2 3 1
# 6 1 4 2

tabulate(summary(M)$i)
# [1] 3 2 0 1

tabulate(summary(M)$i) > 2
# [1]  TRUE FALSE FALSE FALSE
于 2013-08-12T16:16:41.570 に答える