我的数据框定义如下(实际上有200多个变量):
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,这与调查中的类似响应的响应级别相同。
我想要一个数据框,其中包括每个var级别的级别计数,每个变量的总计行,如:
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 :(得分: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"))