15

単一のベクトルがある場合、値を下回る最初のオカレンスを取得できます。

test <- c(0.5,0.8,0.1,0.08,0.06,0.04)
which(test<0.1)[1]    

として正しく答えを与えます4。ただし、次の 2 列の行列で 5 未満の最初の出現など、行列の各列内の最初の出現を取得するにはどうすればよいですか。

test2 <- matrix(c(5,8,3,4,7,5,6,2),ncol=2)

applywithを使用するとwhich、リストが返されます。

> apply(test2<5,2,which)
[[1]]
[1] 3 4

[[2]]
[1] 4

すべての列の戻り値を使用applyしている間:which.min1

> apply(test2<5,2,which.min)
[1] 1 1

一方、私が欲しいものはただ返されるべきです[1] 3 4- 私は明らかなものを見逃していますか?

4

4 に答える 4

8

これが別の答えです。test3 を記述する場所に test2 を意味すると仮定すると、'test2<5' は論理ベクトルであることに注意してください。最小値は FALSE になります。最大値 (TRUE) はあなたが望むものです:

> apply(test2<5,2,which.max)
[1] 3 4

最大値が TRUE でない場合、これは正しくないことに注意してください。

于 2012-05-28T19:04:04.983 に答える
6

これを試して:

test2 <- matrix(c(5,8,3,4,7,5,6,2),ncol=2)
> test2
     [,1] [,2]
[1,]    5    7
[2,]    8    5
[3,]    3    6
[4,]    4    2
> foo <- function(x){which(x < 5)[1]}
> apply(test2,2,foo)

ここで重要なのは、単一のベクトルで機能することがわかっている部分を取得し、それを関数でラップすることです。applyその関数を各列に適用します。

于 2012-05-28T19:01:01.660 に答える
4

私はこれに偶然出くわしたので、ここに別の解決策があります:

max.col(t(test2 < 5), "first")
于 2013-02-12T15:33:42.900 に答える