次の形式のさまざまな数の列を持つマトリックスがあります。
1 10 10 10 15
2 14 14 13 13
4 19 19 20 21
6 32 32 20 15
次の出力を生成する各行の過半数を選択したいと思います。
1 10
2 14/13
3 19
4 32
次の形式のさまざまな数の列を持つマトリックスがあります。
1 10 10 10 15
2 14 14 13 13
4 19 19 20 21
6 32 32 20 15
次の出力を生成する各行の過半数を選択したいと思います。
1 10
2 14/13
3 19
4 32
必要なものはほとんど得られるように見えtable
ましたが、出力をマッサージする必要があります。 Compose
これを行う興味深い方法です:
require(functional)
apply(m, 1, Compose(table,
function(i) i==max(i),
which,
names,
function(i) paste0(i, collapse='/')
)
)
## [1] "10" "13/14" "19" "32"
考えられる答えの 1 つ:
# over each row of data.frame (or matrix)
sapply(1:nrow(x), function(idx) {
# get the number of time each entry in df occurs
t <- table(t(x[idx, ]))
# get the maximum count (or frequency)
t.max <- max(t)
# get all values that equate to maximum count
t <- as.numeric(names(t[t == t.max]))
})
遅い追加ですが、例のように値がすべて正の場合、次のこともできます。
apply(x, 1, function(idx) {
which(tabulate(idx) == max(tabulate(idx)))
})
最初の列なし:
apply(x[,-1], 1, function(idx) {
which(tabulate(idx) == max(tabulate(idx)))
})
最後に出力を微調整します。
s <- apply(x[,-1], 1, function(idx) {
which(tabulate(idx) == max(tabulate(idx)))
})
sapply(s, paste, sep="", collapse="/")
[1] "10" "13/14" "19" "32"