数据框中按因子组划分的Top-n-Box(李克特量表)

时间:2018-12-21 10:00:46

标签: r group-by dplyr sum

我有以下数据框,该数据框是针对十个7-李克特态度量表进行聚类分析以实现特定产品收益的结果(请参阅“变量”列)。在此,n是为每个福利陈述特定值的人数,总和是每个集群的总人数。 n2只是每个群集中所有答案的相对答案份额(n2 = n / cum * 100,基本上是%)。

现在,我想创建一个新列,汇总/汇总前n个(在“值”列中表示)百分比(在n2中表示) 每个 好处,例如新列“ Top-3-Box”,例如行1-7 / Benefit.1的值为46.5(这是前3个值分别为7,6,5的行的n2之和)。如有解决方案,那将很好,它可以立即在dplyr中应用。

请参见下面的数据框:

     cluster variable   value     n   cum    n2
     <int> <chr>      <dbl> <int> <int> <dbl>
 1       1 Benefit.1      1    11    86  12.8
 2       1 Benefit.1      2    11    86  12.8
 3       1 Benefit.1      3     6    86   7  
 4       1 Benefit.1      4    18    86  20.9
 5       1 Benefit.1      5    16    86  18.6
 6       1 Benefit.1      6    14    86  16.3
 7       1 Benefit.1      7    10    86  11.6
 8       1 Benefit.10     1    10    86  11.6
 9       1 Benefit.10     2    13    86  15.1
10       1 Benefit.10     3     8    86   9.3
# ... with 40 more rows

非常感谢您的支持!

1 个答案:

答案 0 :(得分:0)

我们可以通过对与前3个“值”相对应的值进行子设置来对n2的sum进行分组

library(dplyr)
df1 %>% 
    group_by(cluster, variable) %>% 
    mutate(percent = sum(n2[value %in% 1:3]))

如果已经为每个“集群”,“变量” order设置了“值”,那么我们就可以将“ n2”作为子集

df1 %>% 
    group_by(cluster, variable) %>% 
    mutate(percent = sum(n2[1:3]))