У меня есть фрейм данных со столбцом, представляющим ответы тестового элемента (0 == неверно, 1 == правильно). Для анализа в другом (не R) программном обеспечении мне нужно преобразовать данные отклика элемента в строки. Полученные данные должны выглядеть следующим образом:
24 1111111111111111111111111110111111111111111111111111111111111111111111111111
50 1111111111111111111111111101111111111110111110111111111111111111111111111111
361 1111110111111111011011111110001111001011101110111111101111111101111101111111
349 1111111111111111111111111110111111110111111101111010011111110111111111111111
Я смог сделать это при чтении всего oop по одной строке данных за раз, например:
for(i in 1:nrows) {
text[i] <- paste(sprintf("%6d", subresp$study_id[i]), paste0(subresp[i, items], collapse=''))
}
где items - строка символов, содержащая 70 имен столбцов, которые должны быть включены. Это выглядит следующим образом:
> head(items)
[1] "letter_sound1" "letter_sound2" "letter_sound3" "letter_sound4"
[5] "letter_sound5" "letter_sound6"
>
(К сожалению, имена столбцов не все так часто называются, как в этом примере.)
Это работает, но это медленно и неуклюже (у меня есть сделать это для 12 уровней тестирования и 3 формы каждый), поэтому я хочу сделать это аккуратно. Я попробовал этот код:
resp.str <- subresp %>%
select(items) %>%
rowwise() %>%
mutate(resp.str=paste0(subresp[, items], collapse=""))
Это не работает, как ожидалось вообще. Вместо того, чтобы сворачивать ответы элемента в строку, он просто помещает все в строку.
$ resp.str : chr "c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1"| __truncated__ "c(1, 1, 1, 1, 1, 1,
Я пробовал quo(items)
и !!items
, {{items}}
, sym(items)
во всех различных комбинациях. Ничего не работает
Это очень расстраивает. Я был бы очень признателен за любую помощь.
В соответствии с запросом здесь является частью данных:
structure(list(study_id = c(24, 50, 361, 349, 296), step_name = c("STEP 3",
"STEP 3", "STEP 3", "STEP 3", "STEP 3"), assessment_id = c(1888537,
2533870, 2491616, 2266251, 2315116), color = c("Purple", "Purple",
"Purple", "Purple", "Purple"), letter_sound1 = c(1, 1, 1, 1,
1), letter_sound2 = c(1, 1, 1, 1, 1), letter_sound3 = c(1, 1,
1, 1, 1), letter_sound4 = c(1, 1, 1, 1, 1), letter_sound5 = c(1,
1, 1, 1, 1), letter_sound6 = c(1, 1, 1, 1, 1), letter_sound7 = c(1,
1, 0, 1, 1), letter_sound8 = c(1, 1, 1, 1, 1), letter_sound9 = c(1,
1, 1, 1, 1), letter_sound10 = c(1, 1, 1, 1, 1)), row.names = c(NA,
-5L), class = c("tbl_df", "tbl", "data.frame"), .Names = c("study_id",
"step_name", "assessment_id", "color", "letter_sound1", "letter_sound2",
"letter_sound3", "letter_sound4", "letter_sound5", "letter_sound6",
"letter_sound7", "letter_sound8", "letter_sound9", "letter_sound10"
))
Если вы читаете структуру данных в фрейм данных с именем foobar
, символьный вектор items
можно получить: items <- names(foobar)[5:14]