从列名 r 中删除数字和字符

标签 r gsub substitution

我正在尝试从 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))

最佳答案

我们可能会更改代码以匹配一个或多个空格 ( \\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 的代码中,它匹配一个大写字母后跟空格和 (是一个元字符,不会转义。 ,因此在正则表达式模式下,它会捕获数字( ([0-9]+) )。但是,这与列名中的模式不匹配,因为在一个空格之后,有一个 ( ,不匹配,因此返回相同的字符串

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))

关于从列名 r 中删除数字和字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69472182/

相关文章:

r - 寻找连续 3 个最冷的月份

r - 不属于同一组的点到该点的最近邻距离

r - 使用孤立节点创建 igraph

Ruby 正则表达式\1 对 gsub 意味着什么

Bash 双进程替换给出了错误的文件描述符

Lua:gsub:无法将捕获的数字字符串处理为数字

r - 在Win7 64位上使用R的rJava包

regex - 如何在R中的正则表达式中转义封闭括号 "]"

regex - 连接 gsub

regex - 如何在通过 R 中的正则表达式匹配找到字母后将其替换为小写字母