如何使用分类响应聚合数据以获取 R 中每种响应类型的百分比



我想获得不同类型问题的分类答案类型的百分比(TYPE(。对于每个人,我对每种类型都有多个响应,具有多个分类响应(不同级别(。

1(每个人应该在不同的行上,并且
2( 列应为 TYPES+响应级别,该值为该个人的问题类型提供特定响应级别的次数百分比。

数据如下所示:

SUBJECT TYPE    RESPONSE  
John    a   kappa                       
John    b   gamma  
John    a   delta  
John    a   gamma  
Mary    a   kappa   
Mary    a   delta       
Mary    b   kappa  
Mary    a   gamma  
Bill    b   delta  
Bill    a   gamma  

结果应如下所示:

SUBJECT a-kappa     a-gamma   a-delta   b-kappa     b-gamma b-delta
John    0.33        0.33      0.33      1.00        1.00    0.00
Mary    0.66        0.33      0.00      1.00        0.00    0.00
Bill    1.00        0.00      0.00      0.00        0.00    1.00

根据c1au61o_HH的回答,我能够创建适用于我的实际数据文件的东西,但仍需要进行一些后期处理。(它也不是很优雅,但这是一个小问题。

 Finaldf <- mydata %>%     
 group_by(Subject,Type) %>%     
 mutate(TOT = n()) %>%      
 group_by(Subject, Response, Type) %>%     
 mutate(RESPTOT = n())     
 Finaldf <- distinct(Finaldf)    
 Finaldf$Percentage <- Finaldf$RESPTOT/Finaldf$TOT    

非常感谢任何帮助,也请解释一下。

可能这不是最有效的方法,但如果你想使用tidyverse你可以将 2 列合并,然后执行 2 个不同的group_by来计算每个科目和百分比的总数。

library(tidyverse)
df %>% 
  unite(TYPE_RESPONSE, c("TYPE", "RESPONSE"), sep = "_") %>% 
  group_by(SUBJECT) %>% 
  mutate(TOT = n()) %>% 
  group_by(SUBJECT, TYPE_RESPONSE) %>% 
  summarize(perc = n()/TOT * 100) %>% 
  spread(TYPE_RESPONSE, perc)

数据:

df <- tibble( SUBJECT= rep(c("John", "Mary","Bill"), each = 4), 
                 TYPE = rep(c("a","b"), 6),
                 RESPONSE = rep(c("kappa", "gamma", "delta"), 4)
)

编辑回复评论:

我知道您想按 SUBJECTTYPE 计算百分比,因此代码如下所示:

library(tidyverse)
df %>% 
  group_by(SUBJECT, TYPE) %>% 
  mutate(TOT = n()) %>%
  unite(TYPE_RESPONSE, c("TYPE", "RESPONSE"), sep = "_") %>% 
  group_by(SUBJECT, TYPE_RESPONSE) %>% 
  summarize(perc = n()/TOT * 100)%>% 
  spread(TYPE_RESPONSE, perc)

最新更新