使用列的唯一值作为新列并丢失数据来重塑数据框

时间:2015-11-04 11:15:28

标签: r dataframe reshape reshape2

我想使用两个变量作为新data.frame data的列,将旧的data.frame new.data从长到长重新整形。具体来说,我想采用两个变量data$assessmentdata$question_id

1)计算每个data$question_iddata$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的行是参与者,列是评估/问题,值是参与者的响应(缺少的响应留空。

0 个答案:

没有答案