Вот решение, которое использует Tidyverse. Сначала мы собираем данные в узкие форматы данных, затем распространяем их обратно в широкоформатный формат, устанавливая первый столбец в качестве ключа для собранных наблюдений, исключая его из gather()
.
Мы продемонстрируем технику с помощью сводных данных на уровне состояния из США. Бюро переписей .
Я создал таблицу данных о населении для четырех состояний, где состояния (наблюдения) представлены в столбцах, а переменные перечислены в строках таблицы.
Чтобы сделать пример воспроизводимым, мы ввели данные в Excel и сохранили их в виде файла значений, разделенных запятыми, который мы назначаем для вектора в R и читаем с помощью read.csv()
.
textFile <- "Variable,Georgia,California,Alaska,Alabama
population2018Estimate,10519475,39557045,737438,4887871
population2010EstimatedBase,9688709,37254523,710249,4780138
pctChange2010to2018,8.6,6.2,3.8,2.3
population2010Census,8676653,37253956,710231,4779736"
# load tidyverse libraries
library(tidyr)
library(dplyr)
# first gather to narrow format then spread back to wide format
data %>%
gather(.,state,value,-Variable) %>% spread(Variable,value)
... и результаты:
state pctChange2010to2018 population2010Census
1 Alabama 2.3 4779736
2 Alaska 3.8 710231
3 California 6.2 37253956
4 Georgia 8.6 8676653
population2010EstimatedBase population2018Estimate
1 4780138 4887871
2 710249 737438
3 37254523 39557045
4 9688709 10519475