Фильтрация и группировка данных на новый фрейм данных - PullRequest
0 голосов
/ 22 марта 2019

У меня есть набор данных, и я хочу отобразить обобщенные результаты в новом фрейме данных.Пока у меня есть первые два столбца, которые представляют собой уникальные идентификаторы и количество уникальных номеров для этого идентификатора.Теперь я хочу создать дополнительные столбцы, которые будут отображать «Код» для каждого номера дела в виде столбцов 1-го, 2-го случая и т. Д.Логика заключается в том, что в столбцах будет отображаться код, соответствующий номеру случая, если номера случаев совпадают, то сначала он будет отображать код с самой ранней датой, а затем более поздние в столбцах после него.А потом другой «Код» для разных номеров дел одного и того же идентификатора после.Буду признателен за любую помощь, так как я не могу понять, как это сделать, спасибо!

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

     ID        cases.unique        1st Case     2nd Case    3rd Case    4th Case
 1   100            1                715.10      724.50
 2   200            2                717.00      300.02      366.90      444.22
 3   300            1                717.00
 4   400            1                465.80      785.00
 5   500            1                309.00

Данные:

x <- data.frame("ID" = c(100, 100, 200, 200, 200, 200, 300, 400, 400, 500),
                "Case Number" = c(1111, 1111, 1000, 1000, 1001, 1001, 9999, 1422, 1422, 1522), 
                "Date" = c("2013/07/15", "2013/09/23", "2016/06/21", "2016/09/18", "2016/10/20", "2016/08/06", "2017/08/21", "2016/08/23", "2016/08/24","2016/08/14"),
                "Code" = c(715.1, 724.5,717,366.9,444.22,300.02,717,465.8,785,309.0))

Что у меня такдалеко:

x2 <- x %>% 
  group_by(ID) %>% 
  summarize(
    cases.unique = n_distinct(Case.Number)
  )

Ответы [ 2 ]

2 голосов
/ 22 марта 2019

Попробуйте:

library(tidyverse)

x %>%
  group_by(ID) %>%
  arrange(Date = as.Date(Date, "%Y/%m/%d")) %>%
  mutate(cases.unique = n_distinct(Case.Number), 
         cnmbr = paste0("Case ", row_number())) %>%
  distinct(ID, cases.unique, cnmbr, Code) %>%
  spread(cnmbr, Code)

Вывод:

# A tibble: 5 x 6
# Groups:   ID [5]
     ID cases.unique `Case 1` `Case 2` `Case 3` `Case 4`
  <dbl>        <int>    <dbl>    <dbl>    <dbl>    <dbl>
1   100            1     715.     724.      NA       NA 
2   200            2     717      300.     367.     444.
3   300            1     717       NA       NA       NA 
4   400            1     466.     785       NA       NA 
5   500            1     309       NA       NA       NA 
1 голос
/ 22 марта 2019

Вот подход:

library(tidyverse)

x <- data.frame(
  ID = c(100, 100, 200, 200, 200, 200, 300, 400, 400, 500),
  Case Number = c(1111, 1111, 1000, 1000, 1001, 1001, 9999, 1422, 1422, 1522), 
  Date = c("2013/07/15", "2013/09/23", "2016/06/21", "2016/09/18", "2016/10/20", "2016/08/06", "2017/08/21", "2016/08/23", "2016/08/24","2016/08/14"),
  Code = c(715.1, 724.5,717,366.9,444.22,300.02,717,465.8,785,309.0)
)
x %>%
  group_by(ID) %>%
  mutate(
    cases.unique = n_distinct(Case.Number),
    case_label = paste0(row_number(), "_case")
  ) %>%
  select(-Case.Number, -Date) %>%
  spread(case_label, Code)
#> # A tibble: 5 x 6
#> # Groups:   ID [5]
#>      ID cases.unique `1_case` `2_case` `3_case` `4_case`
#>   <dbl>        <int>    <dbl>    <dbl>    <dbl>    <dbl>
#> 1   100            1     715.     724.      NA       NA 
#> 2   200            2     717      367.     444.     300.
#> 3   300            1     717       NA       NA       NA 
#> 4   400            1     466.     785       NA       NA 
#> 5   500            1     309       NA       NA       NA

Создано в 2019-03-22 пакетом представ. (v0.2.1)

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