针对调查数据计算多个受访者的百分比

时间:2017-03-14 15:23:54

标签: r data.table

我是R的新手,如果你能分享你的想法,我将非常感激。 找到Applying calculation per groups within R dataframe之后,我决定使用data.table来计算返回的受访者百分比''所有回复的受访者中都有' a'或者' b'。

我的示例数据可以从下面获得(带有一些警告信息):

library(data.table)
df = data.table(rep(c("I", "II", "III", "IV")), rep(c("A", "B", "C")), 
                rep(c("a", "a", "b", "b", "b"), 10))
colnames(df) = c("grp1", "grp2", "Q1")

以下是我目前获得预期结果的代码;

#1. Obtain the number of rows on Q1 with 'a' and 'b' broken down by grp1 and grp2
ab = df[Q1 %in% c("a", "b"), .N, by = .(grp1, grp2)][order(grp1, grp2)] 

#2. Obtain the equivalent number of rows on Q1 with 'b' only
b = df[Q1 %in% "b", .N, by = .(grp1, grp2)][order(grp1, grp2)] 

# 3. Merge tables 'ab' and 'b' into 'a'
a = merge(b, ab, by = c("grp1", "grp2")) 

# 4. Calculate %b in table a
a$agree = a[, 3]/a[, 4]*100 


    grp1 grp2 N.x N.y agree
 1:    I    A   3   5    60
 2:    I    B   2   4    50
 3:    I    C   3   4    75
 4:   II    A   2   4    50
 5:   II    B   3   5    60
 6:   II    C   2   4    50
 7:  III    A   2   4    50
 8:  III    B   2   4    50
 9:  III    C   3   4    75
10:   IV    A   3   4    75
11:   IV    B   3   4    75
12:   IV    C   2   4    50


# 5. Remove unnecessary columns
a[, 3:4] = NULL 


    grp1 grp2 agree
 1:    I    A    60
 2:    I    B    50
 3:    I    C    75
 4:   II    A    50
 5:   II    B    60
 6:   II    C    50
 7:  III    A    50
 8:  III    B    50
 9:  III    C    75
10:   IV    A    75
11:   IV    B    75
12:   IV    C    50

以上是我需要的输出。现在我有50个问卷项目(Q1到Q50),如果我想为这50个问题获得相同的输出,我将不得不重复相同的过程(1到5)50次,这并不理想。

我想找到一种避免这种重复过程的方法。

我确信必须有一种优雅的方式来自动化这个过程,但作为一个新手,我还没有找到方法。我认为应该以你可能拥有的良好实践为指导,而不是由我有限的知识驱动。

0 个答案:

没有答案