[[dplyr]] の `mutate()` では、`.before` と `.after` パラメータを使用することで、新しい列を任意の位置に挿入できる。デフォルトでは新しい列はデータフレームの末尾に追加されるが、これらのパラメータを指定することで既存の列の前後に新しい列を配置できる。 ```r flights |> mutate( gain = dep_delay - arr_delay, speed = distance / air_time * 60 ) ``` ``` # A tibble: 336,776 × 21 year month day dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay carrier flight tailnum origin dest air_time distance hour minute time_hour gain speed <int> <int> <int> <int> <int> <dbl> <int> <int> <dbl> <chr> <int> <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dttm> <dbl> <dbl> 1 2013 1 1 517 515 2 830 819 11 UA 1545 N14228 EWR IAH 227 1400 5 15 2013-01-01 05:00:00 -9 370. 2 2013 1 1 533 529 4 850 830 20 UA 1714 N24211 LGA IAH 227 1416 5 29 2013-01-01 05:00:00 -16 374. 3 2013 1 1 542 540 2 923 850 33 AA 1141 N619AA JFK MIA 160 1089 5 40 2013-01-01 05:00:00 -31 408. 4 2013 1 1 544 545 -1 1004 1022 -18 B6 725 N804JB JFK BQN 183 1576 5 45 2013-01-01 05:00:00 17 517. 5 2013 1 1 554 600 -6 812 837 -25 DL 461 N668DN LGA ATL 116 762 6 0 2013-01-01 06:00:00 19 394. 6 2013 1 1 554 558 -4 740 728 12 UA 1696 N39463 EWR ORD 150 719 5 58 2013-01-01 05:00:00 -16 288. 7 2013 1 1 555 600 -5 913 854 19 B6 507 N516JB EWR FLL 158 1065 6 0 2013-01-01 06:00:00 -24 404. 8 2013 1 1 557 600 -3 709 723 -14 EV 5708 N829AS LGA IAD 53 229 6 0 2013-01-01 06:00:00 11 259. 9 2013 1 1 557 600 -3 838 846 -8 B6 79 N593JB JFK MCO 140 944 6 0 2013-01-01 06:00:00 5 405. 10 2013 1 1 558 600 -2 753 745 8 AA 301 N3ALAA LGA ORD 138 733 6 0 2013-01-01 06:00:00 -10 319. # ℹ 336,766 more rows # ℹ Use `print(n = ...)` to see more rows ``` ## `.before` で指定列の前に挿入する `.before` パラメータに列名や列番号を指定することで、その列の直前に新しい列を挿入できる。 ```r flights |> mutate( gain = dep_delay - arr_delay, speed = distance / air_time * 60, .before = 1 ) ``` ``` # A tibble: 336,776 × 21 gain speed year month day dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay carrier flight tailnum origin dest air_time distance hour minute time_hour <dbl> <dbl> <int> <int> <int> <int> <int> <dbl> <int> <int> <dbl> <chr> <int> <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dttm> 1 -9 370. 2013 1 1 517 515 2 830 819 11 UA 1545 N14228 EWR IAH 227 1400 5 15 2013-01-01 05:00:00 2 -16 374. 2013 1 1 533 529 4 850 830 20 UA 1714 N24211 LGA IAH 227 1416 5 29 2013-01-01 05:00:00 3 -31 408. 2013 1 1 542 540 2 923 850 33 AA 1141 N619AA JFK MIA 160 1089 5 40 2013-01-01 05:00:00 4 17 517. 2013 1 1 544 545 -1 1004 1022 -18 B6 725 N804JB JFK BQN 183 1576 5 45 2013-01-01 05:00:00 5 19 394. 2013 1 1 554 600 -6 812 837 -25 DL 461 N668DN LGA ATL 116 762 6 0 2013-01-01 06:00:00 6 -16 288. 2013 1 1 554 558 -4 740 728 12 UA 1696 N39463 EWR ORD 150 719 5 58 2013-01-01 05:00:00 7 -24 404. 2013 1 1 555 600 -5 913 854 19 B6 507 N516JB EWR FLL 158 1065 6 0 2013-01-01 06:00:00 8 11 259. 2013 1 1 557 600 -3 709 723 -14 EV 5708 N829AS LGA IAD 53 229 6 0 2013-01-01 06:00:00 9 5 405. 2013 1 1 557 600 -3 838 846 -8 B6 79 N593JB JFK MCO 140 944 6 0 2013-01-01 06:00:00 10 -10 319. 2013 1 1 558 600 -2 753 745 8 AA 301 N3ALAA LGA ORD 138 733 6 0 2013-01-01 06:00:00 # ℹ 336,766 more rows # ℹ Use `print(n = ...)` to see more rows ``` ## `.after` で指定列の後に挿入する `.after` パラメータに列名や列番号を指定することで、その列の直後に新しい列を挿入できる。 ```r flights |> mutate( gain = dep_delay - arr_delay, speed = distance / air_time * 60, .after = day ) ``` ``` # A tibble: 336,776 × 21 year month day gain speed dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay carrier flight tailnum origin dest air_time distance hour minute time_hour <int> <int> <int> <dbl> <dbl> <int> <int> <dbl> <int> <int> <dbl> <chr> <int> <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dttm> 1 2013 1 1 -9 370. 517 515 2 830 819 11 UA 1545 N14228 EWR IAH 227 1400 5 15 2013-01-01 05:00:00 2 2013 1 1 -16 374. 533 529 4 850 830 20 UA 1714 N24211 LGA IAH 227 1416 5 29 2013-01-01 05:00:00 3 2013 1 1 -31 408. 542 540 2 923 850 33 AA 1141 N619AA JFK MIA 160 1089 5 40 2013-01-01 05:00:00 4 2013 1 1 17 517. 544 545 -1 1004 1022 -18 B6 725 N804JB JFK BQN 183 1576 5 45 2013-01-01 05:00:00 5 2013 1 1 19 394. 554 600 -6 812 837 -25 DL 461 N668DN LGA ATL 116 762 6 0 2013-01-01 06:00:00 6 2013 1 1 -16 288. 554 558 -4 740 728 12 UA 1696 N39463 EWR ORD 150 719 5 58 2013-01-01 05:00:00 7 2013 1 1 -24 404. 555 600 -5 913 854 19 B6 507 N516JB EWR FLL 158 1065 6 0 2013-01-01 06:00:00 8 2013 1 1 11 259. 557 600 -3 709 723 -14 EV 5708 N829AS LGA IAD 53 229 6 0 2013-01-01 06:00:00 9 2013 1 1 5 405. 557 600 -3 838 846 -8 B6 79 N593JB JFK MCO 140 944 6 0 2013-01-01 06:00:00 10 2013 1 1 -10 319. 558 600 -2 753 745 8 AA 301 N3ALAA LGA ORD 138 733 6 0 2013-01-01 06:00:00 # ℹ 336,766 more rows # ℹ Use `print(n = ...)` to see more rows ``` ## 関連ノート - **[派生]** [[dplyr の mutate() で関与または作成された列のみを保持する]]: 本ノートの `.before` / `.after` と並ぶ、`mutate()` の出力を整えるパラメータ群 - **[派生]** [[dplyr の mutate() で作成した列は、同一の mutate() 内で即座に利用できる]]: 列追加と連鎖的な計算を一度に書くときに併用する