我想使用两个变量作为新data.frame data
的列,将旧的data.frame new.data
从长到长重新整形。具体来说,我想采用两个变量data$assessment
和data$question_id
:
1)计算每个data$question_id
中data$assessment
的数量,以便
2)每个data$question_id
代表新data.frame中的一列,
3)重新标记每个data$question_id
以表明它所属的评估(即评估1和Q1是评估1_Q1,评估1和评估3是评估1_Q3)。
但是,有两件事需要考虑:
1)评估有不同数量的问题
2)并非所有问题都由参与者填写(即缺失数据)
以下是旧data.frame的一般结构:
> dim(data)
[1] 42106 4
> colnames(data)
[1] "subjectid" "assessment" "question_id" "question_value"
> lapply(data, class)
$subjectid
[1] "integer"
$assessment
[1] "factor"
$question_id
[1] "factor"
$question_value
[1] "factor"
> length(unique(data$subjectid))
[1] 96
> table(data$assessment)
Assessment1 Assessment2
1362 2102
Assessment3 Assessment4
966 864
Assessment5 Assessment6
1183 2093
Assessment7 Assessment8
181 14208
Assessment9 Assessment10
6734 2044
Assessment11 Assessment12
3129 2185
Assessment13 Assessment14
3962 1093
> length(unique(data$question_id))
[1] 431
我希望我的新data.frame new.data
包含代表参与者的行(N = 96),代表评估和问题的列(即Assessment1_Q1),以及new.data$question_value
代表每个参与者的特定分数评估/问题。使用dim(new.data)
应该会产生96 432
看起来应该是这样的
subjectid Assessment1_Q1 Assessment1_Q2 Assessment1_Q3 Assessment1_Q4 Assessment2_Q1 Assessment2_Q2 Assessment2_Q3 Assessment3_Q1 Assessment3_Q2 Assessment3_Q3 Assessment4_Q1 Assessment4_Q2
1 6 7 5 4 1 2 4 8 6
2 5 9 3 1 2 4 8 2 3
3 3 9 5 4 5 9 2 3 7 5 5
正如您所看到的,新的data.frame的行是参与者,列是评估/问题,值是参与者的响应(缺少的响应留空。