如何在tidydata格式中计算各ID的答题正确率占比?
嘿,针对你这个计算每个ID答题正确率的需求,我给你准备了两种常用工具的实现方案,都是处理tidydata的好手:
计算每个ID的答题正确率占比
方案1:用R语言(tidyverse生态)
既然你提到了tidydata,那用dplyr来处理最顺手不过了,步骤清晰明了:
- 先加载tidyverse包
- 按ID分组,接着统计每组的总答题数、正确答题数,最后算出正确率
library(tidyverse) # 假设你的数据存储在名为df的数据框里 accuracy_result <- df %>% group_by(ID) %>% summarise( total_responses = n(), correct_responses = sum(`Button-Pressed` == Correct_Answer), accuracy_rate = correct_responses / total_responses ) # 输出结果 print(accuracy_result)
注意:如果你的列名像Button-Pressed这种带有连字符的特殊符号,一定要用反引号`把列名包裹起来,不然R会识别出错哦
方案2:用Python(pandas库)
要是你习惯用Python处理数据,pandas的分组功能也能轻松搞定这个需求:
import pandas as pd # 假设你的数据存储在名为df的数据框里 accuracy_result = df.groupby('ID').apply( lambda group: pd.Series({ 'total_responses': len(group), 'correct_responses': (group['Button-Pressed'] == group['Correct_Answer']).sum(), 'accuracy_rate': (group['Button-Pressed'] == group['Correct_Answer']).mean() }) ).reset_index() # 输出结果 print(accuracy_result)
这里用mean()直接得到正确率是个小技巧——布尔值会被自动转换成1(匹配)和0(不匹配),取均值刚好就是正确次数占总次数的比例,省去了手动除法的步骤~
核心逻辑说明
不管用哪种工具,核心思路都是一致的:
- 按ID对数据进行分组
- 对每组数据,统计
Button-Pressed与Correct_Answer内容匹配的次数 - 用匹配次数除以该组的总答题次数,得到该ID的答题正确率
比如你给出的示例数据,计算后会得到:
- ID1的正确率为0(5次答题全错)
- ID2的正确率为0.5(2次答题里1次正确)
内容的提问来源于stack exchange,提问作者Yunfei Liang
相关产品推荐
相关产品推荐

