R Language
Плавный и невольный с data.table
Поиск…
Синтаксис
-
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