从列名中删除数字和字符 r
removing numbers and characters from column names r
我正在尝试从 R 中的数据框中的列名称中删除特定数字和字符,但我只能删除数字,尝试了不同的方式但仍将字符保留在末尾。
每一列都用字母表示,然后是括号中的数字;例如日月光 (232)
数据帧
Subject ASE (232) ASD (121) AFD (313)
1 1.1. 1.2 1.3
所需的数据帧
Subject ASE ASD AFD
1 1.1 1.2 1.3
代码
colnames(data)<-gsub("[A-Z] ([0-9]+)","",colnames(data))
我们可能会更改代码以匹配一个或多个 space (\s+
),后跟左括号 (\(
,一个或多个数字 (\d+
)和其他字符 (.*
) 并替换为空白 (""
)
colnames(data) <- sub("\s+\(\d+.*", "", colnames(data))
colnames(data)
[1] "Subject" "ASE" "ASD" "AFD"
或者另一个选项是 trimws
来自 base R
trimws(colnames(data), whitespace = "\s+\(.*")
[1] "Subject" "ASE" "ASD" "AFD"
在 OP 的代码中,它匹配一个大写字母后跟 space,而 (
是一个元字符,不会被转义。 ,因此在正则表达式模式下,它捕获数字 (([0-9]+)
)。但是,这与列名中的模式不匹配,因为在 space 之后有一个 (
不匹配,因此它 returns 相同的字符串
gsub("[A-Z] ([0-9]+)","",colnames(data))
[1] "Subject" "ASE (232)" "ASD (121)" "AFD (313)"
数据
data <- structure(list(Subject = 1L, `ASE (232)` = "1.1.", `ASD (121)` = 1.2,
`AFD (313)` = 1.3), class = "data.frame", row.names = c(NA,
-1L))
你可以这样做:
sub("(\w+).*", "\1", colnames(data))
这使用反向引用 \1
来“记住”任何一系列字母数字字符 \w+
并用记住的位替换 sub
的替换参数中的整个字符串。
我们可以使用 stringr
包中的 word
以及 rename_with
:
library(stringr)
library(dplyr)
data %>%
rename_with(~word(., 1))
Subject ASE ASD AFD
1 1 1.1. 1.2 1.3
我正在尝试从 R 中的数据框中的列名称中删除特定数字和字符,但我只能删除数字,尝试了不同的方式但仍将字符保留在末尾。
每一列都用字母表示,然后是括号中的数字;例如日月光 (232)
数据帧
Subject ASE (232) ASD (121) AFD (313)
1 1.1. 1.2 1.3
所需的数据帧
Subject ASE ASD AFD
1 1.1 1.2 1.3
代码
colnames(data)<-gsub("[A-Z] ([0-9]+)","",colnames(data))
我们可能会更改代码以匹配一个或多个 space (\s+
),后跟左括号 (\(
,一个或多个数字 (\d+
)和其他字符 (.*
) 并替换为空白 (""
)
colnames(data) <- sub("\s+\(\d+.*", "", colnames(data))
colnames(data)
[1] "Subject" "ASE" "ASD" "AFD"
或者另一个选项是 trimws
来自 base R
trimws(colnames(data), whitespace = "\s+\(.*")
[1] "Subject" "ASE" "ASD" "AFD"
在 OP 的代码中,它匹配一个大写字母后跟 space,而 (
是一个元字符,不会被转义。 ,因此在正则表达式模式下,它捕获数字 (([0-9]+)
)。但是,这与列名中的模式不匹配,因为在 space 之后有一个 (
不匹配,因此它 returns 相同的字符串
gsub("[A-Z] ([0-9]+)","",colnames(data))
[1] "Subject" "ASE (232)" "ASD (121)" "AFD (313)"
数据
data <- structure(list(Subject = 1L, `ASE (232)` = "1.1.", `ASD (121)` = 1.2,
`AFD (313)` = 1.3), class = "data.frame", row.names = c(NA,
-1L))
你可以这样做:
sub("(\w+).*", "\1", colnames(data))
这使用反向引用 \1
来“记住”任何一系列字母数字字符 \w+
并用记住的位替换 sub
的替换参数中的整个字符串。
我们可以使用 stringr
包中的 word
以及 rename_with
:
library(stringr)
library(dplyr)
data %>%
rename_with(~word(., 1))
Subject ASE ASD AFD
1 1 1.1. 1.2 1.3