Соберите группы столбцов в новую категорию - PullRequest
0 голосов
/ 04 марта 2019

Все еще изучаю R, и я взглянул на Объединить несколько столбцов в аккуратные данные и Соберите несколько наборов столбцов , но не могу ответить на мой вопрос.

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

year    Bn_elec Bn_water    Hn_elec Hn_water    SF_elec SF_water
2000    148.58  150.8       111.73  159.11      170.74  165.74
2001    189.41  170.34      132.86  195.5       205.14  199.14
2002    234.68  181.89      164.54  223.02      223.33  123.33
2003    272.14  186.43      219.74  305.88      311.17  411.17
2004    253.33  158.29      234.13  291.35      293.01  213

, и я хочу закончить этим:

year    City       electricity  water
2000    Boston          148.58  150.8
2001    Boston          189.41  170.34
2002    Boston          234.68  181.89
2003    Boston          272.14  186.43
2004    Boston          253.33  158.29
2000    Houston         111.73  159.11
2001    Houston         132.86  195.5
2002    Houston         164.54  223.02
2003    Houston         219.74  305.88
2004    Houston         234.13  291.35
2000    San Fransicso   170.74  165.74
2001    San Fransicso   205.14  199.14
2002    San Fransicso   223.33  123.33
2003    San Fransicso   311.17  411.17
2004    San Fransicso   293.01  213.01

Код для репликации набора данных:

usage_data <- data.frame(stringsAsFactors=FALSE,
year = c("2000", "2001", "2002", "2003", "2004"),
Bn_elec = c(148.58, 189.41, 234.68, 272.14, 253.33),
Bn_water = c(150.8, 170.34, 181.89, 186.43, 158.29),
Hn_elec = c(111.73, 132.86, 164.54, 219.74, 234.13),
Hn_water = c(159.11, 195.5, 223.02, 305.88, 291.35),
SF_elec = c(170.74, 205.14, 223.33, 311.17, 293.01),
SF_water = c(165.74, 199.14, 123.33, 411.17, 213.01))

1 Ответ

0 голосов
/ 04 марта 2019

Мы gather в 'long', separate в столбце 'key' в 'two', а затем spread

library(tidyverse)
gather(usage_data, key, val, -year) %>% 
  separate(key, into = c("City", "categ")) %>%
  spread(categ, val)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...