如何重命名包含“(N)”的列名?

How to rename column names containing "(N)"?

我想从列名称中删除“(N)”。

示例数据:

df <- tibble(
  name = c("A", "B", "C", "D"),
   `id (N)` = c(1, 2, 3, 4),
  `Number (N)` = c(3, 1, 2, 8)
)

到目前为止我已经了解了,但不知道如何找出正则表达式的其余部分

df %>% 
  rename_with(stringr::str_replace, 
              pattern = "[//(],N//)]", replacement = "")

但是“数字 (N)”中的 n 不见了。

    name    id N)   umber (N)
1   A   1   3
2   B   2   1
3   C   3   2
4   D   4   8

可能的解决方案:

library(tidyverse)

df <- tibble(
  name = c("A", "B", "C", "D"),
  `id (N)` = c(1, 2, 3, 4),
  `Number (N)` = c(3, 1, 2, 8)
)

df %>% names %>% str_remove("\s*\(N\)\s*") %>% set_names(df,.)

#> # A tibble: 4 × 3
#>   name     id Number
#>   <chr> <dbl>  <dbl>
#> 1 A         1      3
#> 2 B         2      1
#> 3 C         3      2
#> 4 D         4      8

一个简单的解决方案是

colnames(df) <- gsub(" \(N\)", "", colnames(df))

一个班轮:rename_with(df, ~str_remove_all(., ' \(N\)'))

仅限

dplyrrename_with(df, ~sub(' \(N\)', '', .))

我们可以使用 dplyr 包中的 rename_with 函数并应用一个函数(在本例中 str_remove 来自 stringr 包)。

然后用\转义(:

library(dplyr)
library(stringr)
df %>% 
  rename_with(~str_remove_all(., ' \(N\)'))
  name     id Number
  <chr> <dbl>  <dbl>
1 A         1      3
2 B         2      1
3 C         3      2
4 D         4      8

也许你可以试试

setNames(df, gsub("\s\(.*\)", "", names(df)))

这给出了

  name     id Number
  <chr> <dbl>  <dbl>
1 A         1      3
2 B         2      1
3 C         3      2
4 D         4      8