伙计们,我该如何替换列名中第二次出现的点?
样本数据:
age.range.abc = sample(c("ar2-15", "ar16-29", "ar30-44"), 200, replace = TRUE)
gender.region.q = sample(c("M", "F"), 200, replace = TRUE)
region_g.a = sample(c("A", "B", "C"), 200, replace = TRUE)
physi = sample(c("Poor", "Average", "Good"), 200, replace = TRUE)
survey = data.frame(age.range.abc, gender.region.q, region_g.a,physi)
head(survey)
Run Code Online (Sandbox Code Playgroud)
我试过了,但是它删除了所有带下划线的点。我只想用下划线替换第二个或多个出现的事件。
names(survey) = gsub("\\.", "_", names(survey))
names(survey)
# [1] "age_range_abc" "gender_region_q" "region_g_a" "physi"
Run Code Online (Sandbox Code Playgroud)
谢谢,J
本着您原始代码的精神:
names(survey) = sub("(\\..*?)\\.", "\\1_", names(survey))
names(survey)
[1] "age.range_abc" "gender.region_q" "region_g.a" "physi"
Run Code Online (Sandbox Code Playgroud)
一些额外的细节,以防万一。
\\.匹配的第一个.
.*?的.任何字符相匹配。.*匹配任何字符的零个或多个实例。但是匹配是贪婪的。它会尽可能匹配。我想要不贪心的匹配(仅直到第二个匹配.),所以我添加了?抑制贪婪的比赛和.*?任何字符组的比赛,直到我们作为regex命中,接下来的事情......
另一个\\.以匹配第二.。
由于第一部分用括号括(\\..*?)起来,因此存储为\ 1,因此替换模式\\1_将恢复第二部分之前的所有内容.,第二.部分用替换_。
| 归档时间: |
|
| 查看次数: |
874 次 |
| 最近记录: |