#r #tidyverse #stringr
#r #tidyverse #stringr
Вопрос:
У меня есть следующий тестовый фрейм данных. Переменная times
показывает количество секунд, необходимое пользователю для ответа на различные вопросы (например, f140, f130, f210, …) в анкете.
Пример: у человека 1
было 4 секунды на вопрос f140
, 10 секунд на вопрос 130
и т.д. Вопросы в анкете рандомизированы, и общее количество вопросов может варьироваться.
df <- data.frame(user = 1:4,
times = c(
"f140:4,f130:10,f110:3,f120:3,f210:5,f220:4,f240:5,f230:4,f300:4,f410:9,f420:4,f450:18,f500:64,",
"f120:4,f110:3,f140:7,f130:17,f240:10,f230:6,f220:4,f210:4,f300:6,f410:12,f420:10,f450:38,f500:42,",
"f130:26,f120:8,f140:5,f110:4,f220:5,f210:6,f230:9,f240:5,f300:8,f410:8,f420:5,f450:30,f500:3,",
"f120:9,f130:13,f110:5,f140:11,f210:8,f220:12,f240:7,f230:10,f300:8,f410:10,f420:8,f450:46,f500:111,"
)
)
Как я могу получить эти данные в форме, подобной этой:
user | question | time | order
1 f140 4 1
1 f130 10 2
...
2 f120 4 1
2 f110 3 2
...
Я пытался использовать separate()
, но пока безуспешно. Спасибо за помощь!
Комментарии:
1. Вы застряли с этим форматом ввода, или это просто воспроизведение фрейма данных, который вы получаете после выполнения какой-либо другой операции для его загрузки?
2. Нет, формат ввода в порядке. Просто я не получаю символьную строку в нужную мне форму
Ответ №1:
Это может помочь:
library(dplyr)
library(tidyr)
#Code
new <- df %>%
separate_rows(times,sep = ',') %>%
separate(times,c('question','times'),sep=':') %>%
filter(!is.na(times)) %>%
group_by(user) %>%
mutate(order=row_number())
Вывод:
# A tibble: 52 x 4
# Groups: user [4]
user question times order
<int> <chr> <chr> <int>
1 1 f140 4 1
2 1 f130 10 2
3 1 f110 3 3
4 1 f120 3 4
5 1 f210 5 5
6 1 f220 4 6
7 1 f240 5 7
8 1 f230 4 8
9 1 f300 4 9
10 1 f410 9 10
# ... with 42 more rows