Поскольку вы хотите изменить форму только для одной категории "вопрос" (т. Е. Не для нескольких категорий, например "вопрос" и "год"), все переменные Q*
можно рассматривать как уникальные (под) вопросы.
Следовательно, вы можете sep
arate на ""
,
tmp <- reshape(dat[-1], varying=1:194, direction="long", sep="")
, что дает вам длинный формат с переменной time
, включающей все подвопросы.
head(tmp, 3)
# time Q id
# 1.2_1 2_1 5 1
# 1.2_2 2_2 5 1
# 1.5_1 5_1 1 1
После этого вы можете просто разделить переменную time
на "_"
, используя strsplit
, дать результату хорошие имена, используя setNames
, и упорядочить его.
res <- setNames(data.frame(do.call(rbind, strsplit(tmp$time, "_")), tmp[2:3],
stringsAsFactors=FALSE),
c("question", "case", "value", "id"))
res <- res[order(as.numeric(res$question)), ]
Результат
head(res, 18)
# question case value id
# 1.2_1 2 1 5 1
# 1.2_2 2 2 5 1
# 1.5_1 5 1 1 1
# 1.5_2 5 2 2 1
# 1.6_1 6 1 4 1
# 1.6_2 6 2 4 1
# 1.8_1 8 1 5 1
# 1.8_2 8 2 3 1
# 1.9_1 9 1 4 1
# 1.9_2 9 2 4 1
# 1.10_1 10 1 5 1
# 1.10_2 10 2 4 1
# 1.11_1 11 1 5 1
# 1.11_2 11 2 3 1
# 1.11_1.1 11 1.1 5 1
# 1.11_2.1 11 2.1 4 1
# 1.14_1 14 1 3 1
# 1.14_2 14 2 2 1
Данные
dat <- structure(list(X = 2L, Q2_1 = 5L, Q2_2 = 5L, Q5_1 = 1L, Q5_2 = 2L,
Q6_1 = 4L, Q6_2 = 4L, Q9_1 = 4L, Q9_2 = 4L, Q11_1 = 5L, Q11_2 = 3L,
Q8_1 = 5L, Q8_2 = 3L, Q14_1 = 3L, Q14_2 = 2L, Q16_1 = 5L,
Q16_2 = 4L, Q10_1 = 5L, Q10_2 = 4L, Q11_1.1 = 5L, Q11_2.1 = 4L,
Q19_1 = 5L, Q19_2 = 5L, Q20_1 = 5L, Q20_2 = 5L, Q21_1 = 5L,
Q21_2 = 5L, Q15_1 = 5L, Q15_2 = 5L, Q23_1 = 5L, Q23_2 = 4L,
Q24_1 = 5L, Q24_2 = 5L, Q25_1 = 5L, Q25_2 = 5L, Q26_1 = 4L,
Q26_2 = 5L, Q20_1.1 = 4L, Q20_2.1 = 5L, Q21_1.1 = 4L, Q21_2.1 = 5L,
Q29_1 = 5L, Q29_2 = 5L, Q30_1 = 5L, Q30_2 = 5L, Q35_1 = 4L,
Q35_2 = 5L, Q36_1 = 5L, Q36_2 = 5L, Q37_1 = 5L, Q37_2 = 5L,
Q38_1 = 5L, Q38_2 = 5L, Q39_1 = 5L, Q39_2 = 5L, Q41_1 = 5L,
Q41_2 = 5L, Q30_1.1 = 5L, Q30_2.1 = 5L, Q43_1 = 5L, Q43_2 = 5L,
Q44_1 = 5L, Q44_2 = 5L, Q45_1 = 5L, Q45_2 = 5L, Q47_1 = 5L,
Q47_2 = 5L, Q48_1 = 5L, Q48_2 = 5L, Q36_1.1 = 4L, Q36_2.1 = 5L,
Q37_1.1 = 5L, Q37_2.1 = 5L, Q51_1 = 3L, Q51_2 = 2L, Q52_1 = 3L,
Q52_2 = 2L, Q53_1 = 3L, Q53_2 = 2L, Q41_1.1 = 3L, Q41_2.1 = 2L,
Q42_1 = 3L, Q42_2 = 2L, Q56_1 = 5L, Q56_2 = 5L, Q57_1 = 5L,
Q57_2 = 5L, Q58_1 = 5L, Q58_2 = 5L, Q59_1 = 3L, Q59_2 = 2L,
Q60_1 = 4L, Q60_2 = 2L, Q61_1 = 3L, Q61_2 = 2L, Q62_1 = 3L,
Q62_2 = 2L, Q63_1 = 5L, Q63_2 = 4L, Q64_1 = 5L, Q64_2 = 4L,
Q65_1 = 5L, Q65_2 = 5L, Q53_1.1 = 5L, Q53_2.1 = 5L, Q54_1 = 3L,
Q54_2 = 2L, Q68_1 = 5L, Q68_2 = 4L, Q75_1 = 4L, Q75_2 = 4L,
Q57_1.1 = 4L, Q57_2.1 = 4L, Q58_1.1 = 3L, Q58_2.1 = 2L, Q59_1.1 = 5L,
Q59_2.1 = 5L, Q60_1.1 = 5L, Q60_2.1 = 5L, Q61_1.1 = 4L, Q61_2.1 = 3L,
Q81_1 = 5L, Q81_2 = 5L, Q82_1 = 5L, Q82_2 = 5L, Q83_1 = 5L,
Q83_2 = 5L, Q87_1 = 5L, Q87_2 = 5L, Q88_1 = 5L, Q88_2 = 5L,
Q89_1 = 5L, Q89_2 = 5L, Q90_1 = 4L, Q90_2 = 4L, Q91_1 = 5L,
Q91_2 = 5L, Q92_1 = 5L, Q92_2 = 5L, Q93_1 = 5L, Q93_2 = 5L,
Q94_1 = 5L, Q94_2 = 5L, Q95_1 = 5L, Q95_2 = 5L, Q74_1 = 5L,
Q74_2 = 5L, Q75_1.1 = 5L, Q75_2.1 = 5L, Q76_1 = 5L, Q76_2 = 5L,
Q77_1 = 5L, Q77_2 = 5L, Q100_1 = 5L, Q100_2 = 5L, Q101_1 = 5L,
Q101_2 = 5L, Q102_1 = 5L, Q102_2 = 5L, Q103_1 = 5L, Q103_2 = 5L,
Q104_1 = 5L, Q104_2 = 5L, Q105_1 = 5L, Q105_2 = 5L, Q106_1 = 5L,
Q106_2 = 5L, Q107_1 = 5L, Q107_2 = 5L, Q108_1 = 5L, Q108_2 = 5L,
Q113_1 = 5L, Q113_2 = 5L, Q114_1 = 4L, Q114_2 = 4L, Q117_1 = 5L,
Q117_2 = 5L, Q96_1 = 5L, Q96_2 = 5L, Q97_1 = 5L, Q97_2 = 5L,
Q98_1 = 5L, Q98_2 = 5L, Q121_1 = 5L, Q121_2 = 5L, Q103_1.1 = 5L,
Q103_2.1 = 5L, Q104_1.1 = 5L, Q104_2.1 = 5L, Q127_1 = 4L,
Q127_2 = 4L, Q128_1 = 5L, Q128_2 = 5L, Q129_1 = 4L, Q129_2 = 4L), class = "data.frame", row.names = c(NA,
-1L))