Изменение формы данных с помощью dplyr: преобразование 2 столбцов в 1 с дополнительными метками (альтернативные подходы) - PullRequest
0 голосов
/ 09 января 2019

У меня есть пара датафреймов:

Date           Identifier1 Identifier2 Status UsageGroup   Value1 Value2
2011-08-05         A1          A2       1         2        3022    30
2013-10-06         A1          A2       1         2        5368    62
2014-9-21          A1          A2       1         2        9567    112
2015-12-25         A1          A2       1         2        15002   178
2016-10-21         A1          A2       1         2        18001   236

Я бы хотел изменить их на:

Date           Identifier1 Identifier2 Status UsageGroup   Value   Id
2011-08-05         A1          A2       1         2        3022    1
2013-10-06         A1          A2       1         2        5368    1
2014-9-21          A1          A2       1         2        9567    1
2015-12-25         A1          A2       1         2        15002   1
2016-10-21         A1          A2       1         2        18001   1
2011-08-05         A1          A2       1         2        30      2
2013-10-06         A1          A2       1         2        62      2
2014-9-21          A1          A2       1         2        112     2
2015-12-25         A1          A2       1         2        178     2
2016-10-21         A1          A2       1         2        236     2

Я сделал это, используя полное объединение и разделив исходный набор данных следующим образом:

df1<-df %>% rename(value=Value1) %>% select(-c("Value2")) %>% mutate(id=1)
df2<-df %>% rename(value=Value2) %>% select(-c("Value1")) %>% mutate(id=2)
df<-fulljoin(df1,df2) %>% group_by(id)

Однако я хотел бы знать, есть ли более эффективный подход, поскольку мне нужно объединить довольно большие наборы данных.

1 Ответ

0 голосов
/ 09 января 2019

С tidyverse вы можете сделать что-то вроде:

df %>%
 gather(var, Value, -c(Date, Identifier1, Identifier2, Status, UsageGroup)) %>%
 mutate(Id = parse_number(var)) %>%
 select(-var)

         Date Identifier1 Identifier2 Status UsageGroup Value Id
1  2011-08-05          A1          A2      1          2  3022  1
2  2013-10-06          A1          A2      1          2  5368  1
3   2014-9-21          A1          A2      1          2  9567  1
4  2015-12-25          A1          A2      1          2 15002  1
5  2016-10-21          A1          A2      1          2 18001  1
6  2011-08-05          A1          A2      1          2    30  2
7  2013-10-06          A1          A2      1          2    62  2
8   2014-9-21          A1          A2      1          2   112  2
9  2015-12-25          A1          A2      1          2   178  2
10 2016-10-21          A1          A2      1          2   236  2

Преобразует данные из широкого в длинный формат, а затем создает идентификатор.

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