首页 > 解决方案 > 将字符从列名的开头移动到列名的结尾

问题描述

我有一个数据集,其中列名有前缀(对应于面板波),例如

a_age
a_sex
a_jbstat
b_age
b_sex
b_jbstat

我想将前缀转换为后缀,使其变为:

age_a
sex_a
jbstat_a
age_b
sex_b
jbstat_b

我将不胜感激有关有效方法的建议。

标签: rcolumnname

解决方案


您可以使用sub和反向引用:

sub("([a-z])_([a-z]+)", "\\2_\\1", x)
[1] "age_a"    "sex_a"    "jbstat_a" "age_b"    "sex_b"    "jbstat_b"

反向引用\\1\\2召回两个捕获组中的确切字符串,([a-z])\\1([a-z]+)召回,由 召回\\2。为了获得所需的字符串更改,这些“回忆”在替换参数中简单地反转为sub

编辑

如果元素是列名,您可以这样做:

names(df) <- sub("([a-z])_([a-z]+)", "\\2_\\1", names(df))

推荐阅读