【发布时间】:2020-06-26 07:38:08
【问题描述】:
我从excel文件中复制了一个汇总数据,然后dput它如下:
df <- structure(list(date = c(NA, NA, 2018L, 2019L, 2020L), area = structure(c(4L,
5L, 3L, 1L, 2L), .Label = c("1573.98", "1574.95", "1580.86",
"bj", "unit:m2"), class = "factor"), X = structure(c(4L, 5L,
3L, 2L, 1L), .Label = c("1831.15", "1871.61", "1927.95", "sh",
"unit:m2"), class = "factor"), X.1 = structure(c(4L, 5L, 3L,
2L, 1L), .Label = c("519.82", "529.47", "532.24", "tj", "unit:m2"
), class = "factor"), price = structure(c(4L, 5L, 1L, 3L, 2L), .Label = c("20.67",
"4.69", "7.49", "bj", "unit:dollar"), class = "factor"), X.2 = structure(c(4L,
5L, 3L, 2L, 1L), .Label = c("19.34", "21.99", "34.6", "sh", "unit:dollar"
), class = "factor"), X.3 = structure(c(4L, 5L, 3L, 2L, 1L), .Label = c("0.65",
"2.76", "2.96", "tj", "unit:dollar"), class = "factor")), class = "data.frame", row.names = c(NA,
-5L))
我怎样才能将它从一个汇总到一个整齐的垂直数据重塑如下:
structure(list(city = structure(c(1L, 2L, 3L, 1L, 2L, 3L, 1L,
2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L), .Label = c("bj",
"sh", "tj"), class = "factor"), date = c(2018L, 2018L, 2018L,
2019L, 2019L, 2019L, 2020L, 2020L, 2020L, 2018L, 2018L, 2018L,
2019L, 2019L, 2019L, 2020L, 2020L, 2020L), type = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L), .Label = c("area", "price"), class = "factor"), values = c(1580.86,
1927.95, 532.24, 1573.98, 1871.61, 529.47, 1574.95, 1831.15,
519.82, 20.67, 34.6, 2.96, 7.49, 21.99, 2.76, 4.69, 19.34, 0.65
)), class = "data.frame", row.names = c(NA, -18L))
structure(list(city = structure(c(1L, 2L, 3L, 1L, 2L, 3L, 1L,
2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L), .Label = c("bj",
"sh", "tj"), class = "factor"), date = c(2018L, 2018L, 2018L,
2019L, 2019L, 2019L, 2020L, 2020L, 2020L, 2018L, 2018L, 2018L,
2019L, 2019L, 2019L, 2020L, 2020L, 2020L), type = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L), .Label = c("area", "price"), class = "factor"), values = c(1580.86,
1927.95, 532.24, 1573.98, 1871.61, 529.47, 1574.95, 1831.15,
519.82, 20.67, 34.6, 2.96, 7.49, 21.99, 2.76, 4.69, 19.34, 0.65
)), class = "data.frame", row.names = c(NA, -18L))
谢谢。
【问题讨论】: