R Вопрос - Непостоянный разделитель и привязка его обратно к фрейму данных - PullRequest
0 голосов
/ 07 ноября 2019

Это дополнительный вопрос из другого вопроса, R Вопрос - Попытка использовать отдельные для разделения данных с непостоянным разделителем

Только потом я понял, что у меня былоЕще вопросы, пожалуйста, потерпите меня, спасибо!

В качестве примера для Participation_age_group я хотел бы разделить его на Взрослых, Подростков и Детей, чтобы каждый инцидент давал счет каждому участнику возрастной группы. ,Я пытаюсь сделать то же самое с возрастом и полом, а затем привязать его к общему набору данных, чтобы делать прогнозы. Дайте мне знать, если вам нужно больше деталей.

dput(head(x[, c(1, 3)]))    structure(list(incident=c(1,2),age_group= c("0::Adult 18+", "0::Adult 18+||1::Adult 18+"), participant_gender = c("0::Female","0::Male||1::Male")),.Names = c("incident","participant_age_group","participant_gender"),row.names = c(NA, 2L), class = "data.frame")

Дополнительные данные, если это необходимо, Пример данных из набора данных

Я попытался использовать приведенное ниже, но это просто даетодин массивный вектор.

strings <- c ("Child 0-11", "Teen 12-17", "Adult 18 +") </p>

x <- str_count (strings, x $member_age_group) </p>

Желаемый результат

Incident Child Teen Adult Female Male
   1       0    0    1      1     0
   2       0    0    2      0     2

1 Ответ

0 голосов
/ 07 ноября 2019

Я создал образец на основе вашего изображения. Я не знаю, сколько у вас возрастной группы. Если у вас много, вы должны сделать что-то другое. Но здесь у вас есть три категории. Я создал вектор с ними. Я использовал stri_count(), используя вектор в цикле с sapply (). Я применил ту же процедуру и к переменной пола. В итоге я объединил два результата с bind_cols().

library(tidyverse)
library(stringi)

so <- tibble(id = 1:4,
             participant_age_group = c("0::Adult 18+", 
                                       NA,
                                       "0::Child 0-11||1::Teen 12-17",
                                       "0::Adult 18+||1::Adult 18+"),
             participant_gender = c("0::Female",
                                    NA,
                                    "0::Female||1::Female",
                                    "0::Male||1::Female"))

# Create a vector with the three target categories.
category <- c("Child 0-11", "Teen 12-17", "Adult 18+")
gender <- c("Female",  "Male")

sapply(category,function(x){
  stri_count_regex(so$participant_age_group, x)
}) %>% 
as_tibble -> result1

sapply(gender,function(x){
stri_count_regex(so$participant_gender, x)
}) %>% 
as_tibble -> result2

bind_cols(result1, result2)

# A tibble: 4 x 5
#  `Child 0-11` `Teen 12-17` `Adult 18+` Female  Male
#         <int>        <int>       <int>  <int> <int>
#1            0            0           1      1     0
#2           NA           NA          NA     NA    NA
#3            1            1           0      2     0
#4            0            0           2      1     1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...