2012-11-02 53 views
0

我有幾分定義的數據幀如下(有真200+變量)熔融:熔體/ dcast /與邊緣不工作

class_level var1 var2 
      1 4 7 
      1 6 7 
      1 7 6 
      4 3 1 
      4 1 3 

其中class_level是1或4,和VAR1和VAR2已值爲1-7,這是來自調查的likert-like響應級別。

我想,其中包括數以供類級別每個變種水平的數據幀,以總計行每個變量,像:

class_level variable Levels Students 
      1  var1  1  10 
      1  var1  2  7 
      1  var1  3  28 
      1  var1  4  15 
      1  var1  5  54 
      1  var1  6  38 
      1  var1  7  16 
      1  var1 Total  168 
      4  var1  1  58 
      .  .  .  . 
      .  .  .  . 
      .  .  .  . 
      4  var1  7  33 
      4  var1 Total  294 

我曾嘗試以下:

df.m <- melt(df, id.vars=c("class_level"), na.rm=TRUE) 
head(df.m) 
# class_level variable value 
#1   4  var1  4 
#2   4  var1  6 
#3   1  var1  7 
#4   4  var1  3 
#5   1  var1  5 
#6   4  var1  6 

df.c <- dcast(df.m, class_level+variable ~ value, 
       fun.aggregate=length, 
       subset=.(variable %in% c("var1","var2")), 
       margins=TRUE 
      ) 
head(df.c) 
# class_level variable 1 2 3 4 5 6 7 (all) 
#1   1  var1 1 1 8 24 56 101 32 223 
#2   1  var2 2 4 4 22 49 79 56 216 
#3   4  var1 4 5 11 38 91 114 76 339 
#4   4  var2 2 6 11 35 73 98 106 331 

df.o <- melt(df.c, id.vars=c("class_level","variable"), 
       variable.name="Levels", value.name="Students" 
      ) 
head(df.o) 
# class_level variable Levels Students 
#1   1  var1  1  1 
#2   1  var2  1  2 
#3   4  var1  1  4 
#4   4  var2  1  2 
#5   1  var1  2  1 
#6   1  var2  2  4 

正如您所看到的,這會按每個變量的級別生成計數,但不會生成總計行。如何獲取最終數據集(df.o)中的總計行數。任何幫助將不勝感激。

大衛

+0

請提供[重複性好示例](http://stackoverflow.com/questions/5963269/how-to-製作一個偉大的可再現的例子)以及理想的結果。我現在還不清楚你想要做什麼。 – Dason

+1

可能你在'dcast'調用中只是缺少一個')'? – joran

+0

@joran - 是的,更正。 – dmonder

回答

1

我會傾向於使用plyr的幫助:

df.m <- melt(df, id.vars=c("class_level"), na.rm=TRUE) 
df.m$value <- factor(df.m$value, levels=1:7) # To ensure 0 counts as well 
df.c <- ddply(df.m, .(class_level, variable), 
      function(x) c(table(df.m$value), Total=length(df$m.value))) 
df.o <- melt(df.c, id.vars=c("class_level", "variable")) 
+0

剛剛看到@ joran的評論:看起來像OP的代碼畢竟有效! – seancarmody

+0

啊,但OP會通知...? :) – joran

+0

在你的幫助下,讓我們希望如此! – seancarmody