在R中使用pivot_longer将多列变成一列

Mar*_*ber 0 r dplyr tidyr

我有一个population看起来像这样的 df (未列出所有列和行):

Region            X1975     X1976     X1977     ...     X2008
National Total    942420    93717     94974             132802           
Bejing            844.4     845.10    860.50            1695         
Tianjin           702.86    706.50    712.87            968.87
Hebei             4913      4943      4998              6989
...
sum               91979     93275     94540             132058
difference        440       441       433               743
Run Code Online (Sandbox Code Playgroud)

这些列从 到X1975X2008并且中间有每年。我需要的是population看起来像这样:

Region       Year        Population
Bejing       1975        844.4
Bejing       1976        845.10
Bejing       1977        860.50
Bejing       1978        871.50
Run Code Online (Sandbox Code Playgroud)

每个地区的数据(包括全国总计、总和和差异)以及 2000 年及之前的数据不包括在内。想使用pivot_longer 来做到这一点,但我不知道如何做。这是我到目前为止所得到的,但不起作用。

population %>%
  tidyr::pivot_longer( cols = starts_with( 'X' ), names_to = c( ".value", "year" ), names_sep = "(?<=[a-z])(?=[0-9])" ) %>%
  dplyr::mutate( year = as.integer( year ) ) -> test
Run Code Online (Sandbox Code Playgroud)

或者

population %>%
  tidyr::pivot_longer( cols = starts_with( 'X' ), names_to = "year", values_to = "population", ) %>%
  dplyr::mutate( year = as.integer( year ) ) -> test

Run Code Online (Sandbox Code Playgroud)

谢谢!

数据:

dput(population_to_1999)
structure(list(Region = structure(c(21L, 2L, 30L, 11L, 27L, 16L, 
20L, 19L, 12L, 26L, 17L, 34L, 1L, 5L, 18L, 25L, 13L, 14L, 15L, 
7L, 8L, 10L, 3L, 28L, 9L, 33L, 31L, 24L, 6L, 23L, 22L, 32L, 29L, 
4L), .Label = c("Anhui", "Beijing", "Chongqing", "Difference", 
"Fujian", "Gansu", "Guangdong", "Guangxi", "Guizhou", "Hainan", 
"Hebei", "Heilongjiang", "Henan", "Hubei", "Hunan", "Inner Mongolia", 
"Jiangsu", "Jiangxi", "Jilin", "Liaoning", "National Total", 
"Ningxia", "Qinghai", "Shaanxi", "Shandong", "Shanghai", "Shanxi", 
"Sichuan", "sum", "Tianjin", "Tibet", "Xinjiang", "Yunnan", "Zhejiang"
), class = "factor"), X1975 = c(92420, 844.4, 702.86, 4913, 2340, 
1737.9, 3282, 2063.9, 2958.1, 1076.72, 5636.12, 3614.47, 4492, 
2297, 2968.5, 6971, 6758, 4408.15, 4991.36, 4858.48, 3201, 496.82, 
2592.59, 6874.7, 2530.95, 2884.29, 169.11, 2692, 1804.02, 337.49, 
327.92, 1154.53, 91979.38, 440.62), X1976 = c(93717, 845.1, 706.5, 
4943, 2373.1, 1769.2, 3311, 2092.6, 3019.4, 1081.3, 5700.76, 
3662.82, 4558, 2351, 3048.2, 7038, 6852, 4466.7, 5056.81, 4921.95, 
3267, 505.15, 2615.57, 6963, 2585.11, 2951.75, 172.4, 2722, 1825.96, 
346.58, 337.93, 1185.8, 93275.69, 441.31), X1977 = c(94974, 860.5, 
712.87, 4998, 2398.4, 1798.1, 3345, 2117.9, 3072.5, 1086.47, 
5765.28, 3707.4, 4628, 2402, 3118, 7099, 6957, 4520.68, 5111.83, 
4985.54, 3329, 516.36, 2628.06, 7031.3, 2640.14, 3024.59, 175.62, 
2751, 1847.46, 356.75, 346.71, 1208.97, 94540.43, 433.57), X1978 = c(96259, 
871.5, 724.27, 5057, 2423.6, 1823.4, 3394, 2149.3, 3129.6, 1098.28, 
5834.33, 3750.96, 4713, 2446, 3182.8, 7160, 7067, 4574.91, 5165.91, 
5064.15, 3402, 528.45, 2635.56, 7071.9, 2686.4, 3091.47, 178.82, 
2779, 1870.05, 364.86, 355.58, 1233.01, 95827.11, 431.89), X1979 = c(97542, 
897.1, 739.42, 5105, 2447.2, 1851.8, 3443, 2184.6, 3168.7, 1132.14, 
5892.55, 3792.33, 4803, 2487, 3229, 7232, 7189, 4632.78, 5223.05, 
5140.5, 3470, 540.3, 2653.69, 7120.5, 2730.99, 3134.79, 182.69, 
2807, 1893.79, 372.02, 364.14, 1255.97, 97116.05, 425.95), X1980 = c(98705, 
904.3, 748.91, 5168, 2476.5, 1876.5, 3487, 2210.7, 3203.8, 1146.52, 
5938.19, 3826.58, 4893, 2519, 3270.2, 7296, 7285, 4684.45, 5280.95, 
5230, 3538, 552.53, 2664.79, 7154.8, 2776.67, 3173.39, 185.28, 
2831, 1918.43, 376.9, 373.72, 1283.24, 98274.35, 430.65), X1981 = c(100072, 
919.2, 760.32, 5256, 2508.8, 1902.9, 3535, 2230.9, 3239.3, 1162.84, 
6010.24, 3871.51, 4957, 2563, 3303.9, 7395, 7397, 4740.35, 5360.05, 
5326.97, 3613, 560.77, 2694.05, 7215.6, 2826.78, 3222.77, 185.96, 
2865, 1941.4, 381.6, 383.38, 1303.05, 99633.64, 438.36), X1982 = c(101654, 
935, 774.92, 5356, 2546, 1941.6, 3592, 2257.6, 3281.1, 1180.51, 
6088.94, 3924.32, 5016, 2620, 3348.3, 7494, 7519, 4800.92, 5452.12, 
5419.35, 3684, 571.38, 2721.69, 7300.4, 2875.21, 3283.1, 189.25, 
2904, 1974.88, 392.79, 393.04, 1315.9, 101153.32, 500.68), X1983 = c(103008, 
950, 785.28, 5420, 2588.4, 1969.8, 3629, 2269.5, 3306, 1194.01, 
6134.99, 3963.1, 5056, 2668, 3394.5, 7564, 7632, 4865.73, 5509.43, 
5501.85, 3733, 580.66, 2738.63, 7336.9, 2901.46, 3330.8, 193.14, 
2931, 1999.84, 392.57, 399.05, 1333.3, 102271.94, 736.06), X1984 = c(104357, 
965, 795.52, 5487, 2631.5, 1993.1, 3655, 2284.5, 3331, 1204.78, 
6171.43, 3993.09, 5103, 2720, 3457.9, 7637, 7737, 4917.75, 5561.32, 
5585.61, 3806, 589.31, 2747.75, 7364, 2931.85, 3372.1, 196.68, 
2966, 2025.88, 401.61, 406.87, 1344.08, 103383.63, 973.37), X1985 = c(105851, 
981, 804.8, 5548, 2673.5, 2015.9, 3686, 2298, 3357, 1216.69, 
6213.48, 4029.56, 5156, 2769, 3509.8, 7711, 7847, 4980.19, 5622.49, 
5670.65, 3873, 597.51, 2768.26, 7419.3, 2972.18, 3418.1, 199.48, 
3002, 2052.89, 407.38, 414.62, 1361.14, 104575.92, 1275.08), 
    X1986 = c(107507, 1028, 814.97, 5627, 2713.5, 2040.7, 3726, 
    2315.3, 3385, 1232.33, 6269.9, 4070.07, 5217, 2820, 3575.8, 
    7818, 7985, 5047.83, 5695.73, 5799.75, 3946, 605.63, 2807.6, 
    7511.9, 3025.86, 3480, 202.49, 3042, 2085.39, 421.12, 424.33, 
    1383.64, 106117.84, 1389.16), X1987 = c(109300, 1047, 828.73, 
    5710, 2758.1, 2066.4, 3777, 2336.4, 3424, 1249.51, 6348, 
    4121.19, 5287, 2875, 3632.3, 7958, 8148, 5120.27, 5782.61, 
    5931.79, 4016, 615.08, 2845.14, 7613.2, 3072.58, 3534, 207.95, 
    3088, 2115.73, 427.9, 435.16, 1406.33, 107778.37, 1521.63
    ), X1988 = c(111026, 1061, 839.21, 5795, 2807.2, 2093.9, 
    3826, 2357.4, 3466, 1262.42, 6438.27, 4169.85, 5377, 2929, 
    3683.9, 8061, 8317, 5184.94, 5915.68, 6066.84, 4088, 626.85, 
    2873.34, 7716.4, 3127.27, 3594, 212.31, 3140, 2148.15, 434.2, 
    444.53, 1426.42, 109483.08, 1542.92), X1989 = c(112704, 1075, 
    852.35, 5881, 2853, 2122.2, 3876, 2395.4, 3510, 1276.45, 
    6535.85, 4208.88, 5469, 2984, 3746.2, 8160, 8491, 5258.83, 
    6013.62, 6204.96, 4150, 639.2, 2897.01, 7803.2, 3171, 3648, 
    215.91, 3198, 2184.86, 440.2, 454.81, 1454.16, 111170.09, 
    1533.91), X1990 = c(114333, 1086, 866.25, 6159, 2899, 2162.6, 
    3917, 2440.2, 3543, 1283.35, 6766.9, 4238, 5661, 3037, 3810.6, 
    8493, 8649, 5439.29, 6110.89, 6347.19, 4242, 662.77, 2920.9, 
    7892.5, 3267.53, 3730.6, 221.47, 3316, 2254.67, 447.66, 465.68, 
    1529.16, 113860.21, 472.79), X1991 = c(115823, 1094, 872.63, 
    6220, 2941.9, 2183.9, 3939, 2459.7, 3575, 1287.2, 6843.7, 
    4269.5, 5744, 3079, 3864.6, 8570, 8763, 5512.33, 6166.33, 
    6527.01, 4324, 674.13, 2938.99, 7947.8, 3314.63, 3782.1, 
    225.03, 3363, 2284.92, 454.43, 473.88, 1554.57, 115250.28, 
    572.72), X1992 = c(117171, 1102, 878.97, 6275, 2979.3, 2206.6, 
    3958, 2474, 3608, 1289.37, 6911.2, 4304.4, 5817, 3116, 3913.1, 
    8610, 8861, 5579.85, 6207.78, 6706.45, 4380, 686.4, 2950.78, 
    7992.2, 3360.96, 3831.6, 228.53, 3405, 2314.19, 461.02, 482.27, 
    1580.63, 116471.6, 699.4), X1993 = c(118517, 1112, 885.89, 
    6334, 3012.6, 2232.4, 3983, 2496.1, 3640, 1294.74, 6967.27, 
    4334.8, 5870, 3150, 3966, 8642, 8946, 5653.48, 6245.58, 6936.69, 
    4438, 701, 2964.92, 8037.4, 3408.69, 3885.2, 232.22, 3443, 
    2345.23, 466.7, 490.86, 1605.26, 117721.03, 795.97), X1994 = c(119850, 
    1125, 890.55, 6388, 3045.2, 2260.5, 4007, 2515.6, 3672, 1298.81, 
    7020.54, 4363.7, 5938, 3183, 4015.4, 8671, 9027, 5718.81, 
    6302.58, 7209.58, 4493, 711.39, 2985.59, 8098.7, 3458.41, 
    3939.2, 236.14, 3481, 2387.25, 474, 503.87, 1632.7, 119053.52, 
    796.48), X1995 = c(121121, 1251.1, 894.67, 6437, 3077.3, 
    2284.4, 4034, 2550.9, 3701, 1301.37, 7066.02, 4389, 6000, 
    3227, 4062.5, 8705, 9100, 5772.07, 6392, 7387.49, 4543, 723.79, 
    3001.77, 8161.2, 3508.08, 3989.6, 239.84, 3513, 2437.95, 
    481.2, 512.38, 1661.35, 120405.98, 715.02), X1996 = c(122389, 
    1259.4, 898.45, 6484, 3109.3, 2306.6, 4057, 2579.1, 3728, 
    1304.43, 7110.16, 4413, 6054, 3261, 4105.5, 8738, 9172, 5825.13, 
    6428, 7569.78, 4589, 734.14, 2875.3, 8215.4, 3555.41, 4041.5, 
    243.7, 3543, 2466.86, 488.3, 521.21, 1689.29, 121365.96, 
    1023.04), X1997 = c(123626, 1240, 899.8, 6525, 3140.9, 2325.7, 
    4077, 2600.1, 3751, 1305.46, 7147.86, 4434.8, 6109, 3282, 
    4150.3, 8785, 9243, 5872.6, 6465, 7779.69, 4633, 743, 2873.36, 
    8264.7, 3605.81, 4094, 247.6, 3570, 2494.2, 495.6, 528.94, 
    1718.08, 122402.5, 1223.5), X1998 = c(124761, 1245.6, 905.09, 
    6569, 3172.2, 2344.9, 4090, 2603.2, 3773, 1306.58, 7182.46, 
    4456.2, 6152, 3299, 4191.2, 8838, 9315, 5907.23, 6502, 7990.03, 
    4675, 752.82, 2870.75, 8315.7, 3657.6, 4143.8, 251.54, 3596, 
    2519.37, 502.8, 536.57, 1747.35, 123411.99, 1349.01), X1999 = c(125786, 
    1257.2, 910.17, 6614, 3203.6, 2361.9, 4103, 2616.1, 3792, 
    1313.12, 7213.13, 4475.4, 6205, 3316, 4231.2, 8883, 9387, 
    5938.03, 6532, 8217.91, 4713, 761.93, 2860.37, 8358.6, 3710.06, 
    4192.4, 255.51, 3618, 2542.58, 509.8, 543.29, 1775, 124410.3, 
    1375.7), X2000 = c(126743, 1363.6, 912, 6674, 3247.8, 2372.4, 
    4135, 2627.3, 3807, 1321.63, 7327.24, 4679.91, 6278, 3410, 
    4148.5, 8997, 9488, 5960, 6562.05, 8650.03, 4751, 788.05, 
    2848.82, 8407.5, 3755.72, 4240.8, 259.83, 3644, 2556.89, 
    516.5, 554.32, 1849.41, 126134.3, 608.7), X2001 = c(127627, 
    1385.1, 913.98, 6699, 3271.6, 2377.5, 4147, 2637.1, 3811, 
    1327.14, 7354.92, 4697.27, 6325, 3440, 4185.8, 9041, 9555, 
    5974.56, 6595.85, 8733.18, 4788, 795.55, 2829.21, 8436.6, 
    3798.51, 4287.4, 262.95, 3659, 2575.24, 523.1, 563.22, 1876.19, 
    126866.97, 760.03), X2002 = c(128453, 1423.2, 919.05, 6735, 
    3293.7, 2378.6, 4155, 2649.4, 3813, 1334.23, 7380.97, 4730.76, 
    6369, 3466, 4222.4, 9082, 9613, 5987.8, 6628.5, 8842.08, 
    4822, 803.13, 2814.83, 8474.5, 3837.28, 4333.1, 266.88, 3674, 
    2592.58, 528.6, 571.54, 1905.19, 127647.32, 805.68), X2003 = c(129227, 
    1456.4, 926, 6769, 3314.3, 2379.6, 4162, 2658.6, 3815, 1341.77, 
    7405.82, 4763.46, 6410, 3488, 4254.2, 9125, 9667, 6001.7, 
    6662.8, 8962.69, 4857, 810.52, 2803.19, 8529.4, 3869.66, 
    4375.6, 270.17, 3690, 2603.34, 533.8, 580.19, 1933.95, 128420.16, 
    806.84), X2004 = c(129988, 1492.7, 932.55, 6809, 3335.1, 
    2384.4, 4173, 2661.9, 3816.8, 1352.39, 7432.5, 4803.48, 6461, 
    3511, 4283.6, 9180, 9717, 6016.1, 6697.7, 9110.66, 4889, 
    817.83, 2793.32, 8595.3, 3903.7, 4415.2, 273.68, 3705, 2618.78, 
    538.6, 587.71, 1963.11, 129272.11, 715.89), X2005 = c(130756, 
    1538, 939.31, 6851, 3355.2, 2386.4, 4221, 2669.4, 3820, 1360.26, 
    7474.5, 4898, 6516, 3535, 4311.2, 9248, 9768, 6031, 6732.1, 
    9194, 4660, 828, 2798, 8212, 3730, 4450.4, 277, 3720, 2594.36, 
    543.2, 596.2, 2010.35, 129267.88, 1488.12), X2006 = c(131448, 
    1581, 948.89, 6898, 3374.6, 2392.4, 4271, 2679.5, 3823, 1368.08, 
    7549.5, 4980, 6593, 3558, 4339.1, 9309, 9820, 6050, 6768.1, 
    9304, 4719, 835.88, 2808, 8169, 3757.18, 4483, 281, 3735, 
    2606.25, 547.7, 603.73, 2050, 130202.91, 1245.09), X2007 = c(132129, 
    1633, 959.1, 6943, 3392.6, 2405.1, 4298, 2696.1, 3824, 1378.86, 
    7624.5, 5060, 6676, 3581, 4368.4, 9367, 9869, 6070, 6805.7, 
    9449, 4768, 845.03, 2816, 8127, 3762.36, 4514, 284.15, 3748, 
    2617.16, 551.6, 610.25, 2095.19, 131139.1, 989.9), X2008 = c(132802, 
    1695, 968.87, 6989, 3410.6, 2413.7, 4315, 2710.5, 3825, 1391.04, 
    7676.5, 5120, 6741, 3604, 4400.1, 9417, 9918, 6110.8, 6845.2, 
    9544, 4816, 854.18, 2839, 8138, 3793, 4543, 287.08, 3762, 
    2628.12, 554.3, 617.69, 2130.81, 132058.49, 743.51)), 
class = "data.frame", row.names = c(NA, -34L))
Run Code Online (Sandbox Code Playgroud)

sta*_*rja 5

这里的解决方案利用num_range在调用之前对列进行整齐的选择pivot_longer

library(dplyr)
library(tidyr)

df_long <- df %>% 
  select(Region, num_range("X", 1975:1999)) %>% 
  pivot_longer(-Region,
               names_to = "Year",
               names_prefix = "X",
               values_to = "Population")

> df_long
# A tibble: 850 x 3
   Region         Year  Population
   <fct>          <chr>      <dbl>
 1 National Total 1975       92420
 2 National Total 1976       93717
 3 National Total 1977       94974
 4 National Total 1978       96259
 5 National Total 1979       97542
 6 National Total 1980       98705
 7 National Total 1981      100072
 8 National Total 1982      101654
 9 National Total 1983      103008
10 National Total 1984      104357
# ... with 840 more rows
Run Code Online (Sandbox Code Playgroud)