2

RではM、行列を

     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    1    3    3
[3,]    2    4    5
[4,]    6    7    8

サブマトリックスを選択したいm

     [,1] [,2] [,3]
[1,]    1    3    3
[2,]    2    4    5
[3,]    6    7    8

uniqueonを使用しM[,1]て、2 番目の列に最大値がある行を保持するように指定しますM。最後に、アルゴリズムは[2,]セットから行を保持する必要があります\{[1,], [2,]\}。残念ながらunique()、重複を排除した後、行番号ではなく実際の値を持つベクトルを返します。

パッケージ plyr なしで回答を得る方法はありますか? どうもありがとう、アビタス

4

3 に答える 3

1

方法は次のとおりです。

is.first.max <- function(x) seq_along(x) == which.max(x)

M[as.logical(ave(M[, 2], M[, 1], FUN = is.first.max)), ]
#      [,1] [,2] [,3]
# [1,]    1    3    3
# [2,]    2    4    5
# [3,]    6    7    8
于 2013-05-22T13:30:26.587 に答える
1

最も効率的ではない:

M <- matrix(c(1,1,2,6,2,3,4,7,3,3,5,8),4)

t(sapply(unique(M[,1]),function(i) {temp <- M[M[,1]==i,,drop=FALSE]
                                    temp[which.max(temp[,2]),]                                  
         }))

#     [,1] [,2] [,3]
#[1,]    1    3    3
#[2,]    2    4    5
#[3,]    6    7    8
于 2013-05-22T13:38:26.093 に答える
1

を探していduplicatedます。

m <- as.matrix(read.table(text="1    2    3
1    3    3
2    4    5
6    7    8"))
m <- m[order(m[,2], decreasing=TRUE), ]
m[!duplicated(m[,1]),]

#      V1 V2 V3
# [1,]  6  7  8
# [2,]  2  4  5
# [3,]  1  3  3
于 2013-05-22T13:28:41.797 に答える