R删除列名中特定字符之前的所有内容

mspsb9vt  于 2023-01-15  发布在  其他
关注(0)|答案(3)|浏览(235)

我有这样的数据:

data<-structure(list(record_id = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 
    fracture1_medial___1 = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 1), fracture1_medial___2 = c(0, 
    0, 0, 0, 0, 0, 1, 0, 0, 0), fracture1_medial___5 = c(0, 0, 
    0, 0, 0, 0, 0, 0, 1, 0), fracture1_lateral___1 = c(0, 0, 
    0, 0, 0, 0, 0, 0, 0, 1), fracture1_lateral___2 = c(0, 0, 
    0, 0, 0, 0, 1, 0, 0, 0), fracture1_lateral___3 = c(0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0), fracture1_lateral___4 = c(0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0)), class = c("spec_tbl_df", "tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -10L), spec = structure(list(
    cols = list(record_id = structure(list(), class = c("collector_double", 
    "collector")), fracture1_medial___1 = structure(list(), class = c("collector_double", 
    "collector")), fracture1_medial___2 = structure(list(), class = c("collector_double", 
    "collector")), fracture1_medial___5 = structure(list(), class = c("collector_double", 
    "collector")), fracture1_lateral___1 = structure(list(), class = c("collector_double", 
    "collector")), fracture1_lateral___2 = structure(list(), class = c("collector_double", 
    "collector")), fracture1_lateral___3 = structure(list(), class = c("collector_double", 
    "collector")), fracture1_lateral___4 = structure(list(), class = c("collector_double", 
    "collector"))), default = structure(list(), class = c("collector_guess", 
    "collector")), skip = 1L), class = "col_spec"))

如您所见,列的名称类似于“fracture1_lateral_2”。我希望删除第一个下划线之前的所有内容(包括下划线),这样我就可以保留类似于“lateral_2”的列名称,但不包括第一列“record_id”。换句话说,我的目标是:

真实的的数据有更多的列,所以如果我不必写出每个人的名字,那就太理想了。Tidyverse更好,但也很灵活。谢谢!

a0x5cqrl

a0x5cqrl1#

names(data)[-1] = sub(".*?_", "", names(data)[-1])
names(data)
# [1] "record_id"   "medial___1"  "medial___2"  "medial___5"  "lateral___1" "lateral___2" "lateral___3" "lateral___4"
bn31dyow

bn31dyow2#

这是否有效:

> library(dplyr)
> data %>% setNames(gsub('.*_([m|l].*__\\d)', '\\1',names(.)))
# A tibble: 10 x 8
   record_id medial___1 medial___2 medial___5 lateral___1 lateral___2 lateral___3 lateral___4
       <dbl>      <dbl>      <dbl>      <dbl>       <dbl>       <dbl>       <dbl>       <dbl>
 1         1          0          0          0           0           0           0           0
 2         2          0          0          0           0           0           0           0
 3         3          0          0          0           0           0           0           0
 4         4          0          0          0           0           0           0           0
 5         5          0          0          0           0           0           0           0
 6         6          0          0          0           0           0           0           0
 7         7          0          1          0           0           1           0           0
 8         8          0          0          0           0           0           0           0
 9         9          0          0          1           0           0           0           0
10        10          1          0          0           1           0           0           0
>
4ngedf3f

4ngedf3f3#

您可以尝试:

names(data) = gsub(pattern = ".*.1_", replacement="", x=names(data))

相关问题