Список добавляется в фрейм данных - PullRequest
0 голосов
/ 07 июня 2019

Почему список добавляется в мой фрейм данных здесь?

Вот мой фрейм данных

df <- data.frame(ch = rep(1:10, each = 12), # care home id
                 year_id = rep(2018),
                 month_id = rep(1:12), # month using the system over the course of a year (1 = first month, 2 = second month...etc.)
                 totaladministrations = rbinom(n=120, size = 1000, prob = 0.6), # administrations that were scheduled to have been given in the month
                 missed = rbinom(n=120, size = 20, prob = 0.8), # administrations that weren't given in the month (these are bad!)
                 beds = rep(rbinom(n = 10, size = 60, prob = 0.6), each = 12), # number of beds in the care home
                 rating = rep(rbinom(n= 10, size = 4, prob = 0.5), each = 12)) # latest inspection rating (1. Inadequate, 2. Requires Improving, 3. Good, 4 Outstanding)


df <- arrange(df, df$ch, df$year_id, df$month_id)

str(df)

> str(df)
'data.frame':   120 obs. of  7 variables:
 $ ch                  : int  1 1 1 1 1 1 1 1 1 1 ...
 $ year_id             : num  2018 2018 2018 2018 2018 ...
 $ month_id            : int  1 2 3 4 5 6 7 8 9 10 ...
 $ totaladministrations: int  576 598 608 576 608 637 611 613 593 626 ...
 $ missed              : int  18 18 19 16 16 13 17 16 15 17 ...
 $ beds                : int  38 38 38 38 38 38 38 38 38 38 ...
 $ rating              : int  2 2 2 2 2 2 2 2 2 2 ...

Пока все хорошо.

Я просто хочу добавить еще один столбец, который упорядочивает номер месяца в группе ch (в данном примере это соответствует фактическому month_id, но не обращайте на это внимания, мои реальные данные отличаются), поэтому я использую:

df <- df %>% group_by(ch) %>% 
  mutate(sequential_month_counter = 1:n()) 

Похоже, это добавляет кучу вещей, которые я на самом деле не понимаю, не хочу или не хочу, например, список ...

str(df)

> str(df)
Classes ‘grouped_df’, ‘tbl_df’, ‘tbl’ and 'data.frame': 120 obs. of  8 variables:
 $ ch                      : int  1 1 1 1 1 1 1 1 1 1 ...
 $ year_id                 : num  2018 2018 2018 2018 2018 ...
 $ month_id                : int  1 2 3 4 5 6 7 8 9 10 ...
 $ totaladministrations    : int  601 590 593 599 615 611 628 587 604 600 ...
 $ missed                  : int  16 14 17 16 18 16 15 18 15 20 ...
 $ beds                    : int  35 35 35 35 35 35 35 35 35 35 ...
 $ rating                  : int  3 3 3 3 3 3 3 3 3 3 ...
 $ sequential_month_counter: int  1 2 3 4 5 6 7 8 9 10 ...
 - attr(*, "groups")=Classes ‘tbl_df’, ‘tbl’ and 'data.frame':  10 obs. of  2 variables:
  ..$ ch   : int  1 2 3 4 5 6 7 8 9 10
  ..$ .rows:List of 10
  .. ..$ : int  1 2 3 4 5 6 7 8 9 10 ...
  .. ..$ : int  13 14 15 16 17 18 19 20 21 22 ...
  .. ..$ : int  25 26 27 28 29 30 31 32 33 34 ...
  .. ..$ : int  37 38 39 40 41 42 43 44 45 46 ...
  .. ..$ : int  49 50 51 52 53 54 55 56 57 58 ...
  .. ..$ : int  61 62 63 64 65 66 67 68 69 70 ...
  .. ..$ : int  73 74 75 76 77 78 79 80 81 82 ...
  .. ..$ : int  85 86 87 88 89 90 91 92 93 94 ...
  .. ..$ : int  97 98 99 100 101 102 103 104 105 106 ...
  .. ..$ : int  109 110 111 112 113 114 115 116 117 118 ...
  ..- attr(*, ".drop")= logi TRUE

Что здесь происходит? Я просто хочу датафрейм. Почему после $ sequential_month_counter: int 1 2 3 4 5 6 7 8 9 10 ... есть все эти дополнительные выходные данные, и что более важно, я могу их игнорировать и просто продолжать обрабатывать их как нормальный фрейм данных (я буду запускать некоторые обобщенные линейные смешанные модели на df)?

1 Ответ

2 голосов
/ 07 июня 2019

Атрибут "groups" - это место, где dplyr хранит информацию о группировке, добавленную, когда вы сделали group_by(ch). Ничего не повредит, и исчезнет, ​​если вы ungroup():

df %>% group_by(ch) %>% 
  mutate(sequential_month_counter = 1:n()) %>%
  ungroup %>%
  str
# Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 120 obs. of  8 variables:
#  $ ch                      : int  1 1 1 1 1 1 1 1 1 1 ...
#  $ year_id                 : num  2018 2018 2018 2018 2018 ...
#  $ month_id                : int  1 2 3 4 5 6 7 8 9 10 ...
#  $ totaladministrations    : int  575 597 579 605 582 599 577 604 630 632 ...
#  $ missed                  : int  18 16 16 18 18 11 10 13 17 16 ...
#  $ beds                    : int  33 33 33 33 33 33 33 33 33 33 ...
#  $ rating                  : int  3 3 3 3 3 3 3 3 3 3 ...
#  $ sequential_month_counter: int  1 2 3 4 5 6 7 8 9 10 ...

В качестве дополнительного примечания вы должны использовать голые имена столбцов внутри dplyr глаголов, а не data$column. С arrange это не имеет значения много , но в сгруппированных операциях это вызовет ошибки. Вы должны привыкнуть использовать arrange(df, ch, year_id, month_id) вместо arrange(df, df$ch, df$year_id, df$month_id).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...