これは複雑な問題ではなく、解決策はありますが、もっと良い方法があるという気持ちを揺るがすことはできません。
次のように、カテゴリごとの成功と機会の集計を含むdata.frameがあります。
testFrame <- data.frame(successes = c(100, 150, 18),
opportunities = c(215, 194, 40),
category = LETTERS[1:3])
testFrame$category <- as.character(testFrame$category)
これを「背の高い」data.frameに変換したいと思います。ここで、1と0の1つの列は成功/失敗を示し、2番目の列はカテゴリラベルを示します。私は次のコードでこれを行うことができます:
tallFrame <- lapply(1:nrow(testFrame), function(rr){
cbind(rep(c(1, 0), c(testFrame[rr, "successes"], testFrame[rr, "opportunities"]-testFrame[rr, "successes"])), testFrame[rr, "category"])
})
tallFrame <- data.frame(do.call(rbind, tallFrame))
結果tallFrame
は、問題なくdata.frameに変換できるマトリックスになりますが、これは単純なタスクの多くのコードのようです。確かに、これをよりコード効率的に行う方法があります。おそらく、plyr
またはreshape
を使用するか、コードゴルフを探しているだけです。
前もって感謝します。