将重复的问题折叠成R中的总结列

将重复的问题折叠成R中的总结列,r,qualtrics,R,Qualtrics,我使用Qualtrics的循环和合并功能创建了一个数据集,这意味着每个受访者回答了相同10个问题的25个版本中的1个。下面的代码为3名参与者生成结果数据。总共有25名参与者和250个与这些问题相关的专栏,但每个人只回答了其中的10个。还有一个ID号列 structure(list(id = 1:3, q1..1 = c(2L, NA, NA), q2..1 = c(4L, NA, NA), q3..1 = c(3L, NA, NA), q4..1 = c(5L, NA, NA), q5..1

我使用Qualtrics的循环和合并功能创建了一个数据集,这意味着每个受访者回答了相同10个问题的25个版本中的1个。下面的代码为3名参与者生成结果数据。总共有25名参与者和250个与这些问题相关的专栏,但每个人只回答了其中的10个。还有一个ID号列

structure(list(id = 1:3, q1..1 = c(2L, NA, NA), q2..1 = c(4L, 
NA, NA), q3..1 = c(3L, NA, NA), q4..1 = c(5L, NA, NA), q5..1 = c(2L, 
NA, NA), q6..1 = c(1L, NA, NA), q7..1 = c(2L, NA, NA), q8..1 = c(4L, 
NA, NA), q9..1 = c(6L, NA, NA), q10..1 = c(3L, NA, NA), q1..2 = c(NA, 
3L, NA), q2..2 = c(NA, 5L, NA), q3..2 = c(NA, 2L, NA), q4..2 = c(NA, 
6L, NA), q5..2 = c(NA, 4L, NA), q6..2 = c(NA, 2L, NA), q7..2 = c(NA, 
3L, NA), q8..2 = c(NA, 4L, NA), q9..2 = c(NA, 2L, NA), q10..2 = c(NA, 
1L, NA), q1..3 = c(NA, NA, 1L), q2..3 = c(NA, NA, 3L), q3..3 = c(NA, 
NA, 4L), q4..3 = c(NA, NA, 2L), q5..3 = c(NA, NA, 4L), q6..3 = c(NA, 
NA, 5L), q7..3 = c(NA, NA, 3L), q8..3 = c(NA, NA, 3L), q9..3 = c(NA, 
NA, 2L), q10..3 = c(NA, NA, 2L)), class = "data.frame", row.names = c(NA, 
-3L))
我试图将所有人的回答折叠成10列,或者创建10个新列并填充人的回答,或者将每个人的10个回答一直移动到数据集的左侧并删除其余的列。所以我想得到一些类似于这样的结果:

structure(list(id = 1:3, q1 = c(2L, 3L, 1L), q2 = c(4L, 5L, 3L
), q3 = c(3L, 2L, 4L), q4 = c(5L, 6L, 2L), q5 = c(2L, 4L, 4L), 
    q6 = c(1L, 2L, 5L), q7 = c(2L, 3L, 3L), q8 = c(4L, 4L, 3L
    ), q9 = c(6L, 2L, 2L), q10 = c(3L, 1L, 2L)), class = "data.frame", row.names = c(NA, 
-3L))

我没有任何成功,即使把它启动,所以我没有任何有用的前期工作张贴。提前感谢您的帮助

我们可以使用
split.default
根据列名的公共部分划分数据。假设每个问题只有一个答案,我们可以忽略
NA
值进行行求和

temp <- cbind(df[1], sapply(split.default(df[-1], 
         sub("\\..*", "", names(df)[-1])), function(x) rowSums(x, na.rm = TRUE)))

temp[gtools::mixedsort(names(temp))]
#  id q1 q2 q3 q4 q5 q6 q7 q8 q9 q10
#1  1  2  4  3  5  2  1  2  4  6   3
#2  2  3  5  2  6  4  2  3  4  2   1
#3  3  1  3  4  2  4  5  3  3  2   2
temp