Из-за некоторого кодирования набор данных слишком упорядочен. Я хотел бы сохранить столбцы, но хотел бы суммировать каждое действие (= 21 уникальных терминов). Для того, чтобы он помещался в одну строку, которая подсчитывает вхождения в каждом квартиле (Q) процедуры.
Цель состоит в том, чтобы подсчитывать предикторы для каждого случая Q. Данные сортируются по 21 действию, 4 Q и 100 процедурам. В целом счет присутствует, мы хотим разрезать на 4 части (время).
Я также не против подсчета всех действий с удалением Q в качестве столбца.
Я хочу получить это, или это то, что я ожидаю от результата:
procedure`action 1 Q1` `action 1 Q2` `action 2 Q1` `action 2 Q2`
<dbl> <dbl> <dbl> <dbl> <dbl>
1 1 4 2 2 3
2 2 2 2 1 5
3 3 .. .. .. ..
Но мой фрейм данных выглядит так:
Q procedure `action 1 Q1` `action 1 Q2` `action 2 Q1` `action 2 Q2`
<fct> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Q1 1 4 0 0 0
2 Q1 1 0 0 2 0
3 Q1 1 0 0 0 0
4 Q1 1 0 0 0 0
5 Q2 1 0 2 0 0
6 Q2 1 0 0 0 3
7 Q2 1 0 0 0 0
8 Q2 1 0 0 0 0
9 Q1 2 2 0 0 0
10 Q1 2 0 0 1 0
11 Q1 2 0 0 0 0
12 Q1 2 0 0 0 0
13 Q2 2 0 2 0 0
14 Q2 2 0 0 0 5
15 Q2 2 0 0 0 0
16 Q2 2 0 0 0 0
# ... with 4 more variables: `action 3 Q1` <dbl>, `action 3 Q2` <dbl>, `action 4
# Q1` <dbl>, `action 4 Q2` <dbl>
Я попробовал это, но застрял при использовании spread () и выдал второй пример кадра данных в качестве вывода.
procedure <- 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(procedure, Q, action)
library(dplyr)
library(tidyr)
# We can group by procedure, Q and action, and then count the instance with tally().
df_long <- df %>% group_by(procedure, Q, action) %>% tally()
df_long$action.Q <- paste(df_long$action,df_long$Q)
# Now we can use the function spread to create wide dataframe with columns for each combination of Q and action:
df_wide <- df_long %>% spread(action.Q, n, fill=0) %>% select(-c(Q,action))
df_long
выглядит так (после paste(action.Q)
):
# A tibble: 10 x 5
# Groups: procedure, Q [3]
procedure Q action n action.Q
<dbl> <fct> <fct> <int> <chr>
1 1 Q1 action 1 4 action 1 Q1
2 1 Q1 action 2 2 action 2 Q1
3 1 Q1 action 3 2 action 3 Q1
4 1 Q1 action 4 2 action 4 Q1
5 1 Q2 action 1 2 action 1 Q2
6 1 Q2 action 2 4 action 2 Q2
7 1 Q2 action 3 2 action 3 Q2
8 1 Q2 action 4 2 action 4 Q2
9 2 Q1 action 1 2 action 1 Q1
10 2 Q1 action 2 2 action 2 Q1
Источник: Подсчет текстовых значений в разных столбцах, в новых столбцах