次のような「きちんとした」形式のデータセットがあります。
group type score price
1 A Fish + Chips 9 8
2 B Fish + Chips 7 20
3 C Fish + Chips 8 22
4 A Chips 9 0
5 B Chips 0 7
6 C Chips 8 16
7 A Snags 5 19
8 B Snags 9 8
9 C Snags 10 6
データがワイドフォーマットにキャストされた場合、列演算(加算、減算など)を使用して決定される派生データを追加したいと思います。私は、キャストして再び溶かさずにこれを行う方法を考え出そうとしています. ここの簡単な例では、対応するデータからデータをFish
差し引くことによって、タイプのデータを計算したいと思います。これまでのところ、次のことを思いつきました。Chips
Fish + Chips
ddply(subset(mydata, type %in% c("Chips", "Fish + Chips")),
.(group), summarise, type="Fish",
score=score[type=="Fish + Chips"] - score[type=="Chips"],
price=price[type=="Fish + Chips"] - price[type=="Chips"])
を与える
group type score price
1 A Fish 0 8
2 B Fish 7 13
3 C Fish 0 6
その後rbind
、元のデータに戻すことができます。より良いアプローチの提案をいただければ幸いです (たとえそれがキャスト アンド メルトであっても)。
サンプルデータは次のとおりです。
structure(list(group = structure(c(1L, 2L, 3L, 1L, 2L, 3L, 1L,
2L, 3L), .Label = c("A", "B", "C"), class = "factor"), type = structure(c(2L,
2L, 2L, 1L, 1L, 1L, 3L, 3L, 3L), .Label = c("Chips", "Fish + Chips",
"Snags"), class = "factor"), score = c(9, 7, 8, 9, 0, 8, 5, 9,
10), price = c(8, 20, 22, 0, 7, 16, 19, 8, 6)), .Names = c("group",
"type", "score", "price"), row.names = c(NA, -9L), class = "data.frame")