我有一个包含参与者对许多问卷的回答的大型数据集。我试图将其转换为wide,但问题是并非所有参与者都回答了所有问卷,因此当转换为wide时,他们的回答并不对齐。每个问卷也没有实际变量,只有一个总体问卷变量,它表示参与者回答了哪个问卷和项目。以及单独的响应变量。
长数据集如下所示:
#long dataset
subject<-c(1,1,1,1,1,1,2,2,2,2,2,2)
questionnaire<-c("Q1_1", "Q1_2", "Q1_3", "Q2_1", "Q2_2", "Q2_3",
"Q2_1", "Q2_2", "Q2_3", "Q3_1", "Q3_2", "Q3_3")
response<-c(1,2,1,4,3,1,2,1,5,3,1,2)
uniqid<-c(1,2,3,4,5,6,7,8,9,10,11,12)
long<-as.data.frame(cbind(subject, questionnaire, response, uniqid))
long
subject questionnaire response uniqid
1 1 Q1_1 1 1
2 1 Q1_2 2 2
3 1 Q1_3 1 3
4 1 Q2_1 4 4
5 1 Q2_2 3 5
6 1 Q2_3 1 6
7 2 Q2_1 2 7
8 2 Q2_2 1 8
9 2 Q2_3 5 9
10 2 Q3_1 3 10
11 2 Q3_2 1 11
12 2 Q3_3 2 12
Q1表示第一个调查表,Q2表示第二个调查表,依此类推,_1、_2等是每个调查表中的项目。我希望数据最终看起来是:
subject Q1_1 Q1_2 Q1_3 Q2_1 Q2_2 Q2_3
1 1 1 2 1 4 3 1
2 2 NA NA NA 2 1 5
每个调查表和项目都是如此。
目前的数据看起来更像这样:
subject questionnaire.1 response.1 questionnaire.2 response.2
1 1 Q1_1 1 Q1_2 2
2 2 Q2_1 2 Q2_2 1
等等。
我现在遇到两个问题。
1.并非所有参与者都回答了所有问卷。他们开始问卷的时间与其他人不同。这导致在转换为宽时,同一列中对不同问卷的回答。即如上所述,参与者1正在回答问卷1中的问卷1第1项。而参与者2正在回答问卷2的第1项。我不知道如何使每一列对所有参与者都代表相同的问卷项目。
1.我不希望有一个单独的问卷和回复栏,而希望只有一个问卷栏(即标题为Q1_1等),下面是所有参与者的回复。这很容易实现,但由于每一栏都有许多不同问卷的回复,如果不首先重新排序,我无法实现这一点。
我想到的唯一解决方案是为长数据集中每个参与者没有回答的问卷插入NA行。例如,在上面的示例中,为参与者2没有回答Q1项目的地方插入3个NA行。然而,数据集非常大,我相信有更简单的方法来实现我正在尝试做的事情。
1条答案
按热度按时间8cdiaqws1#