如何将带有likert变量的数据帧重新排列到r中的频率/百分比表中?

时间:2014-05-20 10:22:41

标签: r

我有一个包含四个类似Likert的变量的数据框,只有4个可能的值,如下所示:

       group var1 var2 var3 var4
1      1    4    1    3    1
2      2    1    1    1    1
3      1    1    2    1    3
4      2    1    1    2    1
5      1    2    1    4    1
6      2    4    3    4    4
7      1    1    1    1    1
8      2    4    4    3    4
9      2    2    3    3    1
10     1    4    3    2    1
11     2    2    3    1    1
12     2    1    1    1    1
13     2    3    4    4    4
14     2    4    4    4    4
15     1    1    1    1    2
16     2    3    3    2    3
17     2    4    4    2    1
18     2    2    3    4    1
19     1    1    2    1    1
20     2    3    1    3    3
21     1    1    3    1    4
22     1    4    3    4    3
23     2    1    3    3    2
24     2    1    3    1    4
25     2    2    3    2    4
26     1    1    2    3    1
27     1    3    3    1    2
28     1    4    3    3    1
29     1    2    1    3    2
30     2    4    3    3    3

现在想要获得每组和每个变量的百分比值。结果应如下所示:

 group  vars    1   2   3   4
    1   var1    %   %   %   %
    1   var2    %   %   %   %
    1   var3    %   %   %   %
    1   var4    %   %   %   %
    2   var1    %   %   %   %
    2   var2    %   %   %   %
    2   var3    %   %   %   %
    2   var4    %   %   %   %

百分比反映一个变量中组内值的相对量。 我想这应该是可能的,但我还没有找到可以帮助我的R功能。有没有人知道可以帮助解决这个问题的包或功能?

非常感谢提前!

1 个答案:

答案 0 :(得分:4)

要解决此问题,您需要:

  • 首先将数据重新整形为高格式(而不是宽幅)。使用程序包melt()中的reshape2执行此操作。
  • 然后使用cast()以所需形状重新制作数据。这将为您提供包含计数的数据框。
  • 最后,计算行数百分比。您可以使用apply()

试试这个:

library(reshape2)

mdat <- melt(dat, id.vars=c("group"), variable.name="vars")
cdat <- dcast(mdat, group + vars ~ value, length)
cdat[, 3:6] <- t(apply(cdat[, 3:6], 1, function(x)x/sum(x)))
cdat

结果:

  group vars         1          2          3          4
1     1 var1 0.4615385 0.15384615 0.07692308 0.30769231
2     1 var2 0.3846154 0.23076923 0.38461538 0.00000000
3     1 var3 0.4615385 0.07692308 0.30769231 0.15384615
4     1 var4 0.5384615 0.23076923 0.15384615 0.07692308
5     2 var1 0.2941176 0.23529412 0.17647059 0.29411765
6     2 var2 0.2352941 0.00000000 0.52941176 0.23529412
7     2 var3 0.2352941 0.23529412 0.29411765 0.23529412
8     2 var4 0.4117647 0.05882353 0.17647059 0.35294118