r - 计算每个参与者的响应选择,包括 0 个响应的响应选择
问题描述
我有一个数据集,其中包含多个参与者对情绪面孔的反应。参与者以他们认为自己看到的情绪回应。每个参与者进行了多次试验。想象一下,有 4 个答案可能性:厌恶、悲伤、愤怒和中立。我想计算每个参与者选择每个答案可能性的比例。当我最近问了一个类似的问题时,我得到了一个解决方案,后来证明它不适合我的需要。因此,我提出了这个新问题。
以下是一些示例数据:
Response <- c("Disgust", "Sadness", "Disgust", "Anger", "Anger", "Neutral", "Anger", "Disgust", "Happiness") #create example data
ResponseNum <- c(1,2,1,3,3,4,3,1,5) #Response, but expressed in Numbers
ppnum <- c(1,1,1,2,2,2,3,3,3)
df2a_anger <- as.data.frame(cbind(Response, ResponseNum, ppnum)) #create dataframe
df2a_anger$ResponseNum <- as.numeric(as.character(df2a_anger$ResponseNum)) # make numeric
这是一些示例代码:
library(dplyr)
df2a_anger %>%
count(ppnum, ResponseNum) %>%
group_by(ppnum) %>%
mutate(n = n/sum(n))
我发现自己试图解决我的问题的另一种方法涉及聚合函数,但是两者都遇到相同的问题:当未选择响应选项时它们不计算在内:例如,参与者 1 选择的代码输出厌恶 66% 和悲伤33%。我还希望它输出参与者 1 选择中立和愤怒的 0%。有谁知道如何让 R 做到这一点?
解决方案
你可以使用janitor
:
library(janitor)
library(dplyr)
df2a_anger %>%
tabyl(Response, ppnum) %>%
adorn_percentages(denominator = 'col') %>%
adorn_pct_formatting()
这给了你:
Response 1 2 3
Anger 0.0% 66.7% 33.3%
Disgust 66.7% 0.0% 33.3%
Happiness 0.0% 0.0% 33.3%
Neutral 0.0% 33.3% 0.0%
Sadness 33.3% 0.0% 0.0%
或者,如果您希望将响应选项作为列标题:
df2a_anger %>%
tabyl(ppnum, Response) %>%
adorn_percentages(denominator = 'row') %>%
adorn_pct_formatting()
这给了你:
ppnum Anger Disgust Happiness Neutral Sadness
1 0.0% 66.7% 0.0% 0.0% 33.3%
2 66.7% 0.0% 0.0% 33.3% 0.0%
3 33.3% 33.3% 33.3% 0.0% 0.0%
推荐阅读
- xslt - 从 fop-0.95 升级到 fop-2.3 时的 PDF 对齐问题
- python - 比较两个数据帧
- date - %PUT - 以数字宏变量的格式打印日期和时间
- talend - 如何使用 Talend 连接到 Salesforce?
- xcode - 将每个 .metal 文件编译成单独的 .metallib
- css - 导航栏 - 需要帮助
- java - 如何通过 Selenium 和 Page Factory 实现 AjaxElementLocatorFactory?
- java - 如何用另一个字符串替换一个字符串的出现并计算所做的更改次数?
- java - 如何在 Activity 之外使用 ProgressBar 编写 Upload firebase 方法?
- symfony - Gedmo Loggable 扩展:向条目添加新列