建立了一个包含多个单项选择题的调查问卷,以便对受访者进行评分。最初对每个问题的选择进行评分。这个初始分数可能会改变,但与问题无关。下面列出的value
列反映了这个初始分数。
我想使用一个加权问题的公式给受访者评分。由于公式可能会发生变化以反映不同的评估标准,因此更自然的选择是获得答案。
简单示例
structure(list(id = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L),
.Label = c("Ind_1", "Ind_2"), class = "factor"),
question = structure(c(1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L),
.Label = c("Q1", "Q2", "Q3", "Q4", "Q5"), class = "factor"),
value = c(1L, 1L, 3L, 2L, 5L, 1L, 2L, 3L, 2L, 4L)),
.Names = c("id", "question", "value"),
class = "data.frame", row.names = c(NA, -10L))
代表:
id question value
Ind_1 Q1 1
Ind_1 Q2 1
Ind_1 Q3 3
Ind_1 Q4 2
Ind_1 Q5 5
Ind_2 Q1 1
Ind_2 Q2 2
Ind_2 Q3 3
Ind_2 Q4 2
Ind_2 Q5 4
公式: 这是为了对受访者进行评分而应用的公式
2*((Q1+ 1.5*Q2)/2) + 2.5*((Q3+(2*Q4)+Q5)/3)
预期结果
id scored_value
Ind_1 12.50
Ind_2 13.17
希望这很清楚
答案 0 :(得分:3)
可能有更好的答案。首先,我使用reshape2
包将数据从long转换为wide。然后我使用plyr
包计算了得分值。
foo <- read.table(text="id question value
Ind_1 Q1 1
Ind_1 Q2 1
Ind_1 Q3 3
Ind_1 Q4 2
Ind_1 Q5 5
Ind_2 Q1 1
Ind_2 Q2 2
Ind_2 Q3 3
Ind_2 Q4 2
Ind_2 Q5 4", header=TRUE)
library(reshape2)
# convert from long to wide
bar <- dcast(foo, id ~ question)
library(plyr)
# for each id, compute the scored value
baz <- ddply(bar, .(id), summarise, scored_value=2*((Q1+ 1.5*Q2)/2) + 2.5*((Q3+(2*Q4)+Q5)/3))