我想获得不同类型问题的分类答案类型的百分比(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)
)
编辑回复评论:
我知道您想按 SUBJECT
和 TYPE
计算百分比,因此代码如下所示:
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)