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

РЕДАКТИРОВАТЬ 1: Ясность и опечатки, подробно описано в примере.


У меня есть набор данных с одним столбцом (Action), который имеет текстовые значения.Я хочу подсчитать уникальные значения (для данного Operatie) и поместить их в новый столбец в соответствии с их идентификатором (== Operatie).В Action.

имеется 21 уникальное значение. В новом наборе данных важно, чтобы новый столбец (который считает одно текстовое значение из Action) был связан со значением Q.Operatie (имеет значения Q1, Q2, Q3, Q4) и Operatie (1:100).

Таким образом, если мы возьмем первые 4 строки в нашем примере, то у нас будет столбец с именем Q1.Delegerend == 2. Тогда как следующий столбец будет Q1.Goedaardig == 1Потому что у нас есть 2 случая Delegerend и 1 случай Goedaardig для Operation == 1.Я игнорирую Instruerend для этого примера.

Это приводит к 4 ( Q1.X: Q4.X ) столбцам, каждый из которых имеет свое уникальное количество текстовых значений в пределах своего допустимого диапазона.Таким образом, Q1.Delegerend, Q2.Delegerend, Q3.Delegerend, Q4.Delegerend для строки Operatie == 1 для Delegerend (один из 21 уникальных).Возможно, нам понадобится установить «матрицы перехода», отсюда и разделение наблюдений.

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

   Operatie Tijdstip Berekening.voor.D Minuut.van.de.Operatie Berekening.voor.F Q.Operatie Actor Responder        Action Focus InterTeam
1         1 08:44:56             00:00                      1                1%        Q1      C        OA    Delegerend     1         b
2         1 08:45:43             00:00                      2                2%        Q1     C*        AM    Goedaardig     1         a
3         1 08:46:45             00:01                      3                4%        Q1     OA       OA*   Instruerend     3          
4         1 08:47:10             00:02                      3                4%        Q1      C       OA*    Delegerend     1         b
5         1 08:48:03             00:03                      4                6%        Q1      C      Team  Onderwijzend     1         b
6         1 08:48:44             00:03                      5                7%        Q1      C      Team Bewustwording     1         b
7         1 08:49:28             00:04                      6                8%        Q1     C*         C   Instruerend     1         b
8         1 08:50:30             00:05                      7                9%        Q1      C        C*  Onderwijzend     1         b
9         1 08:50:47             00:05                      7               10%        Q1      C        AM    Delegerend     1         a
10        1 08:51:47             00:06                      8               11%        Q1      C        OA   Instruerend     1         b

Таким образом, в конечном итоге я хотел бы иметь одну строку ( Operatie ) с 21 столбцом с частотой этого уникального текста (взятой из столбца Действие * 1046)*), отсортировано по уровням Q.Operatie.Да, это приведет к большому количеству столбцов, 21 уникальному значению, умноженному на 4. Но это нормально.

   Operatie Minuten Chirurg1 Chirurg2 Q1.Delegerend Q2.Delegerend Q3.Delegerend Q4.Delegerend Q1.Goedaardig
1         1      72       10       11           2          4            5            5
2         2      30       10       11           2          2            6            12
3         3     102        1        2           1          5            12            ...
4         4     212        2       NA           3         13            13
5         5      37        4       NA           1          2            ...
6         6      57        2       NA           3          9
7         7     120        3       NA           1          9
8         8     146        3       NA           1          6
9         9     143        2        9           3         10
10       10     189        9        2           3         12

Поэтому я попытался составить список для работы с dplyr, см. Ниже.Мне не удалось заставить его работать бегло.У меня сложилось впечатление, что можно вызвать список для подсчета уникальных значений, но я не знаю, как это записать, используя dplyr.Я просмотрел несколько постов, но ничего не нашел о подсчете нескольких строк, чтобы перенести его в новый набор данных.Однако последнее достаточно просто, мне просто нужны столбцы.

my_list <- list(unique(sort(obs_IND$Action)))

obs_IND %>% 
count(my_list) %>%
group_by(Operatie) %>%
tally()

Использованные источники:

1 Ответ

1 голос
/ 19 мая 2019

Я создал несколько примеров данных:

operatie <- rep(c(rep(1,10), rep(2,10)),2)
Q <- rep(rep(c(rep('Q1',5),rep('Q2',5)),2),2)
action <- rep(rep(paste('action', 1:4),5),2)
df <- data.frame(operatie, Q, action)

library(dplyr)
library(tidyr)

Мы можем сгруппировать по operatie, Q и action, а затем подсчитать экземпляр с помощью tally ().

df_long <- df %>% group_by(operatie, Q, action) %>% tally()
df_long$action.Q <- paste(df_long$action,df_long$Q)

Теперь мы можем использовать функцию spread для создания широкого кадра данных со столбцами для каждой комбинации Q и action:

df_wide <- df_long %>% spread(action.Q, n, fill=0) %>% select(-c(Q,action))

Результат

  Q     operatie `action 1 Q1` `action 1 Q2` `action 2 Q1` ...
  <fct>    <dbl>         <dbl>         <dbl>         <dbl> ...
1 Q1           1             4             0             0 ...
2 Q1           1             0             0             2 ...
3 Q1           1             0             0             0 ...
4 Q1           1             0             0             0 ...
5 Q2           1             0             2             0 ...
6 Q2           1             0             0             0 ...
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...