一尘不染

改变新列并将它们插入旧列

javascript

我想使用创建新列,across并且新列与旧列插入。在示例中,我手动重新定位列以显示所需的输出。但是我想自动执行此操作,就像我的 try inside 一样mutate,这显然是行不通的。

library(dplyr)

df <- tibble(a = 1:2, x_b = 1:2, x_c = 1:2)

df |> 
  mutate(across(starts_with("x_"), 
                ~ .x * 2, 
                .names = "{sub('x_', 'y_', .col)}"),
         .after = c(x_b, x_c)) |> 
  relocate(y_b, .after = x_b) |> 
  relocate(y_c, .after = x_c)

#> # A tibble: 2 × 5
#>       a   x_b   y_b   x_c   y_c
#>   <int> <int> <dbl> <int> <dbl>
#> 1     1     1     2     1     2
#> 2     2     2     4     2     4

阅读 76

收藏
2023-05-18

共1个答案

一尘不染

要自动执行你所描述的操作,你可以使用以下方法:

library(dplyr)

df <- tibble(a = 1:2, x_b = 1:2, x_c = 1:2)

df <- df %>%
  mutate(across(starts_with("x_"), ~ .x * 2, .names = "y_{.col}")) %>%
  relocate(starts_with("y_"), .after = starts_with("x_"))

这里的关键是使用starts_with()函数来选择以x_开头的列和以y_开头的列,然后将它们重新定位到x_列之后。这样,你就可以自动完成列的重新定位,而不需要手动指定每个列的位置。

结果将如下所示:

phpCopy code# A tibble: 2 x 5
      a   x_b   x_c   y_b   y_c
  <int> <int> <int> <dbl> <dbl>
1     1     1     1     2     2
2     2     2     2     4     4

现在,新列y_by_c将自动插入到对应的x_bx_c列之后。

2023-05-18