Изменение формы фрейма данных — преобразование строк в столбцы

Предположим, что у нас есть фрейм данных, который выглядит как

set.seed(7302012)

county         <- rep(letters[1:4], each=2)
state          <- rep(LETTERS[1], times=8)
industry       <- rep(c("construction", "manufacturing"), 4)
employment     <- round(rnorm(8, 100, 50), 0)
establishments <- round(rnorm(8, 20, 5), 0)

data <- data.frame(state, county, industry, employment, establishments)

  state county      industry employment establishments
1     A      a  construction        146             19
2     A      a manufacturing        110             20
3     A      b  construction        121             10
4     A      b manufacturing         90             27
5     A      c  construction        197             18
6     A      c manufacturing         73             29
7     A      d  construction         98             30
8     A      d manufacturing        102             19

Мы хотели бы изменить это так, чтобы каждая строка представляла (штат и )округ, а не округ -отрасль, со столбцами construction.employment, construction.establishmentsи аналогичными версиями для производства. Каков эффективный способ сделать это?

Один из способов — подмножество

construction <- data[data$industry == "construction", ]
names(construction)[4:5] <- c("construction.employment", "construction.establishments")

И аналогично для производства, затем выполните слияние. Это не так уж плохо, если есть только две отрасли, но представьте, что их 14; этот процесс стал бы утомительным (, хотя и стал бы менее утомительным при использовании forцикла по уровнямindustry).

Любые другие идеи?

5
задан SingerOfTheFall 30 July 2012 в 17:07
поделиться