私は lme4 に付属のデータセットを使用しており、reshape2 を適用してロングからワイドに変換する方法を学習しようとしています [投稿の最後にある完全なコード]。
library(lme4)
data("VerbAgg") # load the dataset
データセットには 9 つの変数があります。「怒り」、「性別」、および「id」は「項目」によって変化しませんが、「resp」、「btype」、「situ」、「モード」、および「r2」は変化します。
reshape() を使用して、データセットをロング フォーマットからワイド フォーマットに変換することに成功しました。
wide <- reshape(VerbAgg, timevar=c("item"),
idvar=c("id", 'Gender', 'Anger'), dir="wide")
これは、123 個の変数で 316 個の観測値を生成し、正しく変換されているように見えます。ただし、reshape/reshape2 を使用してワイド データフレームを再現することはできませんでした。
wide2 <- recast(VerbAgg, id + Gender + Anger ~ item + variable)
Using Gender, item, resp, id, btype, situ, mode, r2 as id variables
Error: Casting formula contains variables not found in molten data: Anger
recast が id 変数を定義する方法について 100% 明確ではないかもしれませんが、なぜ "Anger" が表示されないのか非常に混乱しています。同様に、
wide3 <- recast(VerbAgg, id + Gender + Anger ~ item + variable,
id.var = c("id", "Gender", "Anger"))
Error: Casting formula contains variables not found in molten data: item
誰かが私が間違っていることを見ることができますか? メルト/キャストの理解を深めたい!
完全なコード:
## load the lme4 package
library(lme4)
data("VerbAgg")
head(VerbAgg)
names(VerbAgg)
# Using base reshape()
wide <- reshape(VerbAgg, timevar=c("item"),
idvar=c("id", 'Gender', 'Anger'), dir="wide")
# Using recast
library(reshape2)
wide2 <- recast(VerbAgg, id + Gender + Anger ~ item + variable)
wide3 <- recast(VerbAgg, id + Gender + Anger ~ item + variable,
id.var = c("id", "Gender", "Anger"))
# Using melt/cast
m <- melt(VerbAgg, id=c("id", "Gender", "Anger"))
wide <- o cast(m,id+Gender+Anger~...)
Aggregation requires fun.aggregate: length used as default
# Yields a list object with a length of 8?
m <- melt(VerbAgg, id=c("id", "Gender", "Anger"), measure.vars = c(4,6,7,8,9))
wide <- dcast(m, id ~ variable)
# Yields a data frame object with 6 variables.