【发布时间】:2018-01-23 13:56:24
【问题描述】:
我正在尝试将第一个数据集中的心理问卷测试分数转换为另一个数据集中的标准化分数(百分位数范围)
测试分数是来自接受我问卷调查的 9 个人的一个分数
TestResults <- data.frame(ID = c(1:9),
Observed = c(14, 8, 33, 23, 5, 79, 2, 11, 5), Results = NA)
评分表,来自测试发布者,在 R 中手动实现,为简单起见在此处缩短
ScoringSheet <- data.frame(Percentiles = c(99,95,85,55,10), Score = c(79,33,20,15,5))
我想用ScoringSheet 中观察到的分数的相应百分位值填充Results 列。对于评分,一个简单的算法适用,我无法在 R 中实现
1 如果TestResults$Observed %in% ScoringSheet$Score,那么Results 应该是ScoringSheet 中对应的Percentiles 值。
2 如果!(TestResults$Observed %in% ScoringSheet$Score),那么TestResults$Results 应该是两个ScoringSheet$Percentiles 的平均值,在这两个Observedscore 之间
3 如果TestResults$Observed < min(ScoringSheet$Score) 那么这些最小观察值的Results 值应该是min(ScoringSheet$Percentiles)/2
因此,我需要这个
TestResults <- data.frame(ID = c(1:9),
Observed = c(14, 8, 33, 23, 5, 79, 2, 11, 5),
Results = c(0.5,0.5,95,90,0.5,99,0.5,0.5,0.5))
到目前为止,我可以在 TestResults$Observed 和 ScoringSheet$Score 上使用 merge() 获得标准 1 的相应百分位数,从而为不完全匹配的值创建 NA。我现在想知道如何实现标准 2 和 3。
提前谢谢你!
【问题讨论】:
-
为什么14的分数是0.5?由于它在 5 到 15 之间,我希望它是
(55+10)/2? -
确实如此!抱歉编码错误。
标签: r if-statement merge match sapply