假设我有以下数据框:
xx2xx30x4xx <- rep(5,30)
yyyy3yy50y5yyy <- rep(4,30)
zz12zzzz70z8zz <- rep(7,30)
df <- data.frame(xx2xx30x4xx,yyyy3yy50y5yyy,zz12zzzz70z8zz)
我想重命名列名,以便它们只包含两者之间的最大数字。我想过用gsub / grep和一个循环来做,例如: 这会返回列名
grep(pattern = "[50-100]", x = colnames(df), value= T )
现在,我希望列名等于匹配的模式,即50-100而不是更小的数字。这可能吗?如果没有,您是否知道如上所述重命名列的其他通用方法?提前致谢。
答案 0 :(得分:1)
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