[英]How can I aggregate data with categorical responses to get the percentage of each response type in R?
我想獲取不同類型問題(TYPE)的分類答案類型的百分比。 對於每個人的每種類型,我都有多個響應,以及多個分類響應(不同級別)。
1)每個人都應位於不同的行,並且
2)列應為TYPES + Response Level,其值為該個人對該問題類型給出特定響應級別的次數的百分比。
數據如下所示:
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列tidyverse
,然后進行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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.