使用两列的值和缺失数据重塑数据集

Reshape dataset using two columns' values and with missing data

我想使用两列的值作为新数据集的列,将缺失数据的数据集从长到宽重塑。这是一个例子:

ID  Survey  Question  Response
1        1         1         1
1        1         2         2
1        2         1         3
1        2         2         
1        2         3         4
1        3         1         3
1        3         2         4
2        1         1         2
2        1         2         
2        2         1         6
2        2         2         2
2        2         3         3
2        3         1         
2        3         2         5

我希望它看起来像这样

ID Survey1.Q1 Survey1.Q2 Survey2.Q1 Survey2.Q2 Survey2.Q3 Survey3.Q1 Survey3.Q1
1           1          2          3                     4          3          4
2           2                     6          2          3                     5

或者您可以选择在投射时格式化数据(感谢@Pierre)

res <- dcast(ID~paste0("Survey",Survey)+paste0("Q",Question),
    value.var="Response",data=dat)

reshape() 来自 {stats}:

d <- read.table(header=TRUE, text=
'ID  Survey  Question  Response
1        1         1         1
1        1         2         2
1        2         1         3
1        2         2         NA
1        2         3         4
1        3         1         3
1        3         2         4
2        1         1         2
2        1         2         NA
2        2         1         6
2        2         2         2
2        2         3         3
2        3         1         NA
2        3         2         5')
d$t <- 10*d$Survey+d$Question
reshape(d[,-(2:3)], dir="wide", timevar="t", idvar="ID")