v <- sample(1:15)やりたいことは,
mat <- matrix(v, nc=3)
colnames(mat) <- month.name[1:3]
> mat
January February March
[1,] 13 10 8
[2,] 12 11 14
[3,] 2 1 6
[4,] 4 3 15
[5,] 7 5 9
> mat2まずは,ループを回すプログラムを作成しました。
第1位 第2位 第3位
[1,] "January" "February" "March"
[2,] "March" "January" "February"
[3,] "March" "January" "February"
[4,] "March" "January" "February"
[5,] "March" "January" "February"
label <- colnames(mat)apply()関数を使ってやりたいと思い,以下を作成しました。
loop <- 1:nrow(mat)
mat2 <- mat
for(i in loop) {
v <- mat[i,]
mat2[i,] <- label[order(v, decreasing=TRUE)]
}
colnames(mat2) <- paste("第", 1:ncol(mat), "位", sep="")
mat2
mat2 <- apply(mat, 1, function(x) label[order(x, decreasing=TRUE)])結果は,所望するものとはまったく違います。
> mat2私には,理解できないで困っております。
[,1] [,2] [,3] [,4] [,5]
[1,] "January" "March" "March" "March" "March"
[2,] "February" "January" "January" "January" "January"
[3,] "March" "February" "February" "February" "February"
No.22969 Re: 【R】apply()関数の使い方 【aoki】 2020/10/14(Wed) 23:02
apply() で返されるものが何なのかを確認してください> apply(mat, 1, function(x) order(x, decreasing=TRUE))なので,求めるものを得るためには,
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 3 3 3
[2,] 2 1 1 1 1
[3,] 3 2 2 2 2> label[apply(mat, 1, function(x) order(x, decreasing=TRUE))]としなければならないのです。
[1] "January" "February" "March"
[4] "March" "January" "February"
[7] "March" "January" "February"
[10] "March" "January" "February"
[13] "March" "January" "February"
または,> mat2 <- t(apply(mat, 1, function(x) label[order(x, decreasing=TRUE)]))でもよいです。
> mat2
[,1] [,2] [,3]
[1,] "January" "February" "March"
[2,] "March" "January" "February"
[3,] "March" "January" "February"
[4,] "March" "January" "February"
[5,] "March" "January" "February"
No.22970 御礼(Re:【R】apply()関数の使い方) 【明石】 2020/10/15(Thu) 08:07
青木先生 様;
お忙しいところを失礼いたします,明石と申します。
有り難いご教示をいただき,心から,心より感謝申し上げます。
ご丁寧にご説明をしてくださいましたので,よく理解できました。
誠にありがとうございました。
誠にありがとうございました。
//
● 「統計学関連なんでもあり」の過去ログ--- 048 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る