Функция base reshape
прекрасно работает:
df <- data.frame(
year = c(rep(2000, 12), rep(2001, 12)),
month = rep(1:12, 2),
values = rnorm(24)
)
df_wide <- reshape(df, idvar="year", timevar="month", v.names="values", direction="wide", sep="_")
df_wide
Где
idvar
- это столбец классов, который разделяет строки timevar
- это столбец классов, который будет приведен к ширине v.names
- это столбец, содержащий числовые значения direction
указывает широкий или длинный формат - , необязательный
sep
Аргумент - это разделитель, используемый между timevar
именами классов и v.names
в выходных данных data.frame
.
Если idvar
не существует, создайте его перед использованием функции reshape()
:
df$id <- c(rep("year1", 12), rep("year2", 12))
df_wide <- reshape(df, idvar="id", timevar="month", v.names="values", direction="wide", sep="_")
df_wide
Просто помните, что idvar
требуется!Компоненты timevar
и v.names
просты.Вывод этой функции более предсказуем, чем некоторые другие, так как все явно определено.