Подсчет определенных слов в строке, которые возникают в определенном порядке - PullRequest
0 голосов
/ 11 октября 2019

1) Я хотел бы посчитать, сколько раз мои ученики могли указать 5 конкретных слов (у каждого ученика есть своя строка).

2) Я хотел бы создать еще один столбец, в котором указано,или нет ответы студентов были в правильном порядке (правильный порядок = "зеленый - желтый - оранжевый - красный - черный").

3) Я также хотел бы создать столбец, который подсчитывает количество ЗАКАЗАошибки, допущенные студентами.

Все данные указаны в нижнем регистре, и каждый член отделяется "-". Иногда люди повторяли слова (например, у них было два ответа: «красный» и «очень красный»), «красный» должен получить очко, а «очень красный» - нет. Я также не хочу начислять баллы за слова типа "reddest", которые содержат правильную строку "red". Количество ответов каждого студента из пяти было переменным, варьируясь от 0 до 6.

#     Student responses
Id    DF$Colors
1     green - yellow - orange - red - black
2     yellow - green - orange - reddest - black
3     red - violet - pink - black
4     purple - green - orange - red - black
5     blue - pink - yellow - scarlet
6     green - yellow - orange - red - very red - black
7     orange - green - yellow - red - black
8     orange - green - yellow - black - red

Результат, к которому я стремлюсь:

Id  DF$Colors                                         DF$CountCorr DF$CorrOrder  DF$OrderMistakes 

1   green - yellow - orange - red - black             5            TRUE          0
2   yellow - green - orange - reddest - black         4            FALSE         1
3   red - violet - pink - black                       2            TRUE          1
4   purple - green - orange - red - black             4            TRUE          0
5   blue - pink - yellow - brown                      1            NA            NA
6   green - yellow - orange - red - very red - black  4*           TRUE          0
7   orange - green - yellow - red - black             5            FALSE         2
8   orange - green - yellow - black - red             5            FALSE         3

* ответов сИз 6 сроков следует вычитать балл. Я смог получить столбец подсчета, выполнив это:

all_colors <- c("green", "yellow", "orange", "red", "black")
library(tidyverse)

DF <- DF %>%
  left_join(DF %>%
             separate_rows(Colors, sep = " - ") %>%
             group_by(Id) %>%
             summarise(CountCorr= max(sum(all_colors %in% unique(Colors))- 
                               sum(duplicated(Colors)), 0)))

Однако я изо всех сил пытаюсь вычислить столбцы, которые определяют, правильный ли порядок, и сколько ошибок было допущено.

Обратите внимание, я задал похожий вопрос 3 месяца назад, но не получил решение, которое было после

...