/ /インデックスを持つ行列からのデータフレーム - r

インデックス-rを有する行列からのデータフレーム

私は、データフレームの列のインデックスを持つ行列を持っています。行列と同じ順序で、インデックスに対応する値を使って別のデータフレームを構築したいと思います。

マトリックスは次の結果として作成されました。 m1 <- sapply(df[,5:58],function(x){order(-x)}) ここでdfは258行の元のデータフレームです59列。行列(258x54)は、データフレームを作成する場合、各列の上位10個の値を持つように、データフレームの54個の列をそれぞれ別々にソートした結果です。

結果データフレームを行列からどのように取得するのですか元のデータフレーム(df)に対応する値を有するが行列位置によって指定された順序であるインデックス(m1)を含む。 forループはデータフレームを構築するソリューションになる可能性がありますが、これを行うための適用やその他の機能がありますか?

私はmapplyを使って解決策を見つけました:

matrix(mapply(function(x,y){df[x,y]},
as.list(t(m1)),rep((5:58),258)),
nrow=258,ncol=54,byrow=T)

回答:

回答№1は0

データが(私はロジックを完全に理解していませんでしたが)次のようになっているとします。

 set.seed(14)
dat <- as.data.frame(matrix(sample(1:80, 258*59,replace=TRUE), ncol=59))
m1 <- sapply(dat[,5:58], function(x) order(-x))
res1 <-  matrix(dat[cbind(c(t(m1)),rep(5:58,258))],nrow=258, ncol=54, byrow=TRUE)

あなたのソリューション

 res2 <- matrix(mapply(function(x,y){dat[x,y]},
as.list(t(m1)),rep((5:58),258)),
nrow=258,ncol=54,byrow=T)

identical(res1,res2)
#[1] TRUE