将字符从列名的开头移动到列名的结尾
Move characters from beginning of column name to end of column name
我有一个数据集,其中列名有前缀(对应于面板波),例如
a_age
a_sex
a_jbstat
b_age
b_sex
b_jbstat
我想将前缀转换成后缀,这样就变成了:
age_a
sex_a
jbstat_a
age_b
sex_b
jbstat_b
如果您能就有效的方法提出建议,我将不胜感激。
一种方法是使用正则表达式
x <- c(
"a_age",
"a_sex",
"a_jbstat",
"b_age",
"b_sex",
"b_jbstat"
)
stringr::str_replace(x, "^([a-z]+)_([a-z]+)$", "\2_\1")
#> [1] "age_a" "sex_a" "jbstat_a" "age_b" "sex_b" "jbstat_b"
由 reprex package (v0.3.0)
于 2020-05-25 创建
编辑:完整示例
df <- data.frame(
a_age = 1,
a_sex = 1,
b_age = 2,
b_sex = 2
)
df
#> a_age a_sex b_age b_sex
#> 1 1 1 2 2
names(df) <- stringr::str_replace(names(df), "^([a-z]+)_([a-z]+)$", "\2_\1")
df
#> age_a sex_a age_b sex_b
#> 1 1 1 2 2
由 reprex package (v0.3.0)
于 2020-05-26 创建
您可以使用 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
回忆。为了获得所需的字符串更改,这些 'recollections' 在 sub
.
的替换参数中简单地反转
编辑:
如果元素是列名,你可以这样做:
names(df) <- sub("([a-z])_([a-z]+)", "\2_\1", names(df))
我有一个数据集,其中列名有前缀(对应于面板波),例如
a_age
a_sex
a_jbstat
b_age
b_sex
b_jbstat
我想将前缀转换成后缀,这样就变成了:
age_a
sex_a
jbstat_a
age_b
sex_b
jbstat_b
如果您能就有效的方法提出建议,我将不胜感激。
一种方法是使用正则表达式
x <- c(
"a_age",
"a_sex",
"a_jbstat",
"b_age",
"b_sex",
"b_jbstat"
)
stringr::str_replace(x, "^([a-z]+)_([a-z]+)$", "\2_\1")
#> [1] "age_a" "sex_a" "jbstat_a" "age_b" "sex_b" "jbstat_b"
由 reprex package (v0.3.0)
于 2020-05-25 创建编辑:完整示例
df <- data.frame(
a_age = 1,
a_sex = 1,
b_age = 2,
b_sex = 2
)
df
#> a_age a_sex b_age b_sex
#> 1 1 1 2 2
names(df) <- stringr::str_replace(names(df), "^([a-z]+)_([a-z]+)$", "\2_\1")
df
#> age_a sex_a age_b sex_b
#> 1 1 1 2 2
由 reprex package (v0.3.0)
于 2020-05-26 创建您可以使用 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
回忆。为了获得所需的字符串更改,这些 'recollections' 在 sub
.
编辑:
如果元素是列名,你可以这样做:
names(df) <- sub("([a-z])_([a-z]+)", "\2_\1", names(df))