R:如何使用ddply输出子集计算(n,%)

时间:2014-11-13 16:14:42

标签: r iteration plyr

我希望你能帮助我解决这个问题:对于我的工作,我必须用R来分析调查数据。数据有许多列,通过这些列我/想要对数据进行分组,然后进行一些计算,例如:有多少男人或女人在某个部门工作?然后计算每个组的数量和百分比。 - >在部门A工作42人,其中30名女性和12名男性,在B部门工作70人,其中26名女性和44名男性。

我目前使用以下代码输出数据(使用ddply):

percentage_median_per_group_multiple_columns <- function(data, column_name, column_name2){
    library(plyr)
    descriptive <- ddply( data, column_name,
        function(x){ 
            percentage_median_per_group(x, column_name)
            percentage_median_per_group(x, column_name2)
        }
    )
    print(data.frame(descriptive))
}

## give number, percentage and median per group_value in column
percentage_median_per_group <- function(data, column_name3){
    library(plyr)
    descriptive <- ddply( data, column_name3,
        function(x){ 
             c(
                 N <- nrow(x[column_name3]), #number
                 pct <- (N/nrow(data))*100   #percentage
                                             #TODO: median
             )
        }
    )
    return(descriptive)
}
#calculate
percentage_median_per_group_multiple_columns(users_surveys_full_responses, "department", "gender")

现在数据输出如下:

Department     Sex  N    % per sex
   A           f    30     71,4
               m    12     28,6

   B           f    26     37,1
               m    44     62,9

但是,我希望输出看起来像这样,所以进行计算并打印在每个子步骤中:

Department   N    % per department     Sex  N    % per sex
   A        42     37,5                f    30     71,4
                                       m    12     28,6
   B        70     62,5                f    26     37,1
                                       m    44     62,9

有没有人建议我如何做到这一点,如果可能的话甚至可以将它构建为动态,这样我就可以通过多列中的变量对它进行分组(例如部门+性别+软件类型+ ...),但是我如果我能够像示例中那样拥有它,那将会很高兴=)

谢谢!

修改 您可以使用它来生成示例数据:

n=100

sample_data = data.frame(department=sample(1:20,n,replace=TRUE),     gender=sample(1:2,n,replace=TRUE))
percentage_median_per_group_multiple_columns(sample_data, "department", "gender")

输出中的V1代表N(数字),V2代表%

0 个答案:

没有答案