簡體   English   中英

使用 tidyselect 和正則表達式重命名 R 數據框的列

[英]Rename columns of R dataframe with tidyselect and regular expression

我有一個數據框,其列名是編號和一些復雜文本的組合:

  1. A1. 再會

  2. A1a。 祝你今天過得愉快

......

  1. Z7d。 其他一些標題

現在我只想保留“A1.”、“A1a.”、“Z7d.”,刪除前面的數字和結尾的文本。 有沒有想法如何使用tidyselectregex做到這一點?

您可以使用此正則表達式 -

names(df) <- sub('\\d+\\.\\s+([A-Za-z0-9]+).*', '\\1', names(df))
names(df)
#[1] "A1"  "A1a" "Z7d"

如果您想要tidyverse答案,也可以在rename_with使用相同的正則表達式。

library(dplyr)
df %>% rename_with(~sub('\\d+\\.\\s+([A-Za-z0-9]+).*', '\\1', .))

#          A1        A1a        Z7d
#1  0.5755992  0.4147519 -0.1474461
#2  0.1347792 -0.6277678  0.3263348
#3  1.6884930  1.3931306  0.8809109
#4 -0.4269351 -1.2922231 -0.3362182
#5 -2.0032113  0.2619571  0.4496466

數據

df <- structure(list(`1. A1. Good day` = c(0.575599213383783, 0.134779160673435, 
1.68849296209512, -0.426935114884432, -2.00321125417319), `2. A1a. Have a nice day` = c(0.414751904860513, 
-0.627767775889949, 1.39313055331098, -1.29222310608057, 0.261957078465535
), `99. Z7d. Some other titles` = c(-0.147446140558093, 0.326334824433201, 
0.880910933597998, -0.336218174873965, 0.449646567320979)), 
class = "data.frame", row.names = c(NA, -5L))

我們可以使用str_extract

library(stringr)
names(df) <- str_extract(names(df), "(?<=\\.\\s)[^.]+")
names(df)
[1] "A1"  "A1a" "Z7d"

數據

df <- structure(list(`1. A1. Good day` = c(0.575599213383783, 0.134779160673435, 
1.68849296209512, -0.426935114884432, -2.00321125417319), `2. A1a. Have a nice day` = c(0.414751904860513, 
-0.627767775889949, 1.39313055331098, -1.29222310608057, 0.261957078465535
), `99. Z7d. Some other titles` = c(-0.147446140558093, 0.326334824433201, 
0.880910933597998, -0.336218174873965, 0.449646567320979)), 
class = "data.frame", row.names = c(NA, -5L))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM