Поиск…


Синтаксис

  • melt(DT, id.vars=c(..), variable.name="CategoryLabel", value.name="Value") с melt(DT, id.vars=c(..), variable.name="CategoryLabel", value.name="Value")
  • Cast with dcast(DT, LHS ~ RHS, value.var="Value", fun.aggregate=sum)

параметры

параметр подробности
id.vars скажите, melt какие столбцы сохранить
variable.name расскажите melt , как назвать колонку с ярлыками категорий
value.name скажите, melt что вызвать столбец, который имеет значения, связанные с метками категории
value.var tell dcast где можно найти значения для dcast в столбцах
формула скажите dcast какие столбцы сохранить для формирования уникального идентификатора записи (LHS) и который содержит метки категорий (RHS)
fun.aggregate указать функцию, которую следует использовать, когда операция литья генерирует список значений в каждой ячейке

замечания

Большая часть того, что входит в данные кондиционирования для создания моделей или визуализации, может быть достигнуто с помощью data.table . По сравнению с другими вариантами, data.table предлагает преимущества скорости и гибкости.

Сводные и невольные табличные данные с данными. Таблица - I

Преобразование из широкой формы в длинную форму

Загрузка data USArrests из datasets .

data("USArrests")
head(USArrests)

           Murder Assault UrbanPop Rape
Alabama      13.2     236       58 21.2
Alaska       10.0     263       48 44.5
Arizona       8.1     294       80 31.0
Arkansas      8.8     190       50 19.5
California    9.0     276       91 40.6
Colorado      7.9     204       78 38.7

Использовать ?USArrests чтобы узнать больше. Сначала преобразуем в data.table . Имена состояний - это имена строк в исходном data.frame .

library(data.table)
DT <- as.data.table(USArrests, keep.rownames=TRUE)

Это данные в широкой форме. Он имеет столбец для каждой переменной. Данные также могут храниться в длинной форме без потери информации. У длинной формы есть один столбец, в котором хранятся имена переменных. Затем он имеет другой столбец для значений переменных. Такая длинная форма USArrests выглядит так.

            State    Crime  Rate
  1:       Alabama   Murder  13.2
  2:        Alaska   Murder  10.0
  3:       Arizona   Murder   8.1
  4:      Arkansas   Murder   8.8
  5:    California   Murder   9.0
 ---                             
196:      Virginia     Rape  20.7
197:    Washington     Rape  26.2
198: West Virginia     Rape   9.3
199:     Wisconsin     Rape  10.8
200:       Wyoming     Rape  15.6

Мы используем функцию melt для переключения с широкой формы на длинную.

DTm <- melt(DT)
names(DTm) <- c("State", "Crime", "Rate")

По умолчанию melt обрабатывает все столбцы с числовыми данными как переменные со значениями. В USArrests переменная UrbanPop представляет собой процентное городское население штата. Он отличается от других вариаций: « Murder , Assault и Rape , которые представляют собой насильственные преступления на 100 000 человек. Предположим, мы хотим сохранить столбец UrbanPop . Мы достигаем этого, установив id.vars следующим образом.

DTmu <- melt(DT, id.vars=c("rn", "UrbanPop" ), 
             variable.name='Crime', value.name = "Rate")
names(DTmu)[1] <- "State"

Обратите внимание, что мы указали имена столбца, содержащего имена категорий (Murder, Assault и т. Д.) С value.name variable.name и столбцом, содержащим значения с value.name . Наши данные выглядят так.

             State UrbanPop  Crime Rate
  1:       Alabama       58 Murder 13.2
  2:        Alaska       48 Murder 10.0
  3:       Arizona       80 Murder  8.1
  4:      Arkansas       50 Murder  8.8
  5:    California       91 Murder  9.0

Генерация резюме с использованием подхода с разделенным применением и сочетанием стиля - легкий ветерок. Например, чтобы обобщить насильственные преступления со стороны государства?

DTmu[, .(ViolentCrime = sum(Rate)), by=State]

Это дает:

        State ViolentCrime
1:    Alabama        270.4
2:     Alaska        317.5
3:    Arizona        333.1
4:   Arkansas        218.3
5: California        325.6
6:   Colorado        250.6

Сводные и невольные табличные данные с данными. Таблица - II

Преобразование из длинной формы в широкую форму

Чтобы восстановить данные из предыдущего примера, используйте dcast так.

DTc <- dcast(DTmu, State + UrbanPop ~ Crime)

Это дает данные в оригинальной широкой форме.

             State UrbanPop Murder Assault Rape
 1:        Alabama       58   13.2     236 21.2
 2:         Alaska       48   10.0     263 44.5
 3:        Arizona       80    8.1     294 31.0
 4:       Arkansas       50    8.8     190 19.5
 5:     California       91    9.0     276 40.6

Здесь обозначение формулы используется для указания столбцов, которые образуют уникальный идентификатор записи (LHS), и столбец, содержащий метки категорий для новых имен столбцов (RHS). Какой столбец используется для числовых значений? По умолчанию dcast использует первый столбец с численными значениями, оставшимися после спецификации спецификации. Чтобы сделать явным, используйте параметр value.var с именем столбца.

Когда операция создает список значений в каждой ячейке, dcast предоставляет метод fun.aggregate для обработки ситуации. Скажем, меня интересуют государства с аналогичным городским населением при расследовании преступлений. Я добавляю столбец Decile с вычисленной информацией.

DTmu[, Decile := cut(UrbanPop, quantile(UrbanPop, probs = seq(0, 1, by=0.1)))]
levels(DTmu$Decile) <- paste0(1:10, "D")

Теперь, Decile ~ Crime получаете несколько значений на ячейку. Я могу использовать fun.aggregate чтобы определить, как они обрабатываются. Как текстовые, так и числовые значения могут обрабатываться таким образом.

dcast(DTmu, Decile ~ Crime, value.var="Rate", fun.aggregate=sum)

Это дает:

dcast(DTmu, Decile ~ Crime, value.var="Rate", fun.aggregate=mean)

Это дает:

             State UrbanPop  Crime Rate Decile
  1:       Alabama       58 Murder 13.2     4D
  2:        Alaska       48 Murder 10.0     2D
  3:       Arizona       80 Murder  8.1     8D
  4:      Arkansas       50 Murder  8.8     2D
  5:    California       91 Murder  9.0    10D

В каждом дециле городского населения есть несколько государств. Используйте fun.aggregate чтобы указать, как они должны обрабатываться.

dcast(DTmu, Decile ~ Crime, value.var="Rate", fun.aggregate=sum)

Это суммирует данные для подобных состояний, давая следующее.

    Decile Murder Assault  Rape
 1:     1D   39.4     808  62.6
 2:     2D   35.3     815  94.3
 3:     3D   22.6     451  67.7
 4:     4D   54.9     898 106.0
 5:     5D   42.4     758 107.6 


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow