根据模式匹配 R 重命名列名

Rename column names according to pattern matching R

假设我有以下数据框:

xx2xx30x4xx <- rep(5,30)
yyyy3yy50y5yyy <- rep(4,30)
zz12zzzz70z8zz <- rep(7,30)
df <- data.frame(xx2xx30x4xx,yyyy3yy50y5yyy,zz12zzzz70z8zz)

我想重命名列名,以便它们只包含中间的最大数字。我想用 gsub/grep 和一个循环来做,例如: 这个returns我列名

grep(pattern = "[50-100]", x = colnames(df), value= T )

现在,我希望列名等于匹配它们的模式,即 50-100 之间的数字,而不是更小的数字。这可能吗?如果没有,您是否知道按照描述重命名列的其他通用方法?提前致谢。

xxxxxx30xxxx <- rep(5,30)
yyyyyyy50yyyyy <- rep(4,30)
zzzzzzz70zzzz <- rep(7,30)
df <- data.frame(zzzzzzz70zzzz,yyyyyyy50yyyyy,xxxxxx30xxxx)

grep(pattern = "[0-100]", x = colnames(df), value= T )

new_colnames <- gsub("\D", "", colnames(df))
colnames(df) <- new_colnames

希望我理解正确。 gsub 命令从列名称中删除所有非数字的内容,因此您只剩下中间的数字。

编辑:

此代码匹配您的字符串中介于 30 和 70 之间的两位数,并提取它。

xxxxxx30xxxx <- rep(5,30)
yyyyyyy50yyyyy <- rep(4,30)
zzzzzzz70zzzz <- rep(7,30)
df <- data.frame(zzzzzzz70zzzz,yyyyyyy50yyyyy,xxxxxx30xxxx)

grep(pattern = "[0-100]", x = colnames(df), value= T )

# new_colnames <- gsub("\D", "", colnames(df))

new_colnames <- regmatches(colnames(df), regexpr("([3-6][0-9])|([7][0])",colnames(df)))

colnames(df) <- new_colnames

这里有一些关于正则表达式和字符串操作的信息:

https://stat.ethz.ch/R-manual/R-devel/library/base/html/regex.html

https://www.regular-expressions.info/rlanguage.html