【发布时间】:2017-10-10 16:41:17
【问题描述】:
我有一个名称向量,其中一些名称具有前导和尾随 . 字符,而有些则没有。这是一个例子:
test <- c('.name.1.','name.2','.name.3.')
我想有条件地删除这些名称中的前导和尾随 . 字符,以返回
c('name.1','name.2','name.3')
【问题讨论】:
我有一个名称向量,其中一些名称具有前导和尾随 . 字符,而有些则没有。这是一个例子:
test <- c('.name.1.','name.2','.name.3.')
我想有条件地删除这些名称中的前导和尾随 . 字符,以返回
c('name.1','name.2','name.3')
【问题讨论】:
使用substr 函数的快速函数:
fun1 <- function(x) substr(x, 1 + (1 * as.numeric(substr(x,1,1)=='.')), nchar(x) - (1 * as.numeric(substr(x, nchar(x), nchar(x)) == '.')))
我们使用substr 在字符串的第一个和最后一个元素中检查.,然后我们再次使用substr 来提取文本的某些部分。例如,如果第一个字符中有.,但第二个字符没有,我们将提取:substr(text, 2, nchar(text))。
fun1(test)
[1] "name.1" "name.2" "name.3"
【讨论】:
只是为了好玩,这里有一个substring 和grepl 的方法。
substring(test, 1L + grepl("^\\.", test), nchar(test) - grepl("\\.$", test))
[1] "name.1" "name.2" "name.3"
这可以将substring 替换为substr。这些函数最酷的地方在于它们将向量作为第二个和第三个参数。在这里,我们可以使用grepl 在第二个参数的 1L 和 2L 之间以及在最后一个字符的位置和倒数第二个字符之间递增。
【讨论】:
你也可以从stringr使用str_extract:
library(stringr)
str_extract(test, "\\w+\\.\\d")
或str_replace_all(stringr-相当于gsub):
str_replace_all(test, "[.](.+)[.]", "\\1")
# [1] "name.1" "name.2" "name.3"
【讨论】: