将后缀转换为列名中的前缀
Transform suffix into prefix in column name
我想将列名的后缀移到其开头,使其成为其前缀。我有许多名称更改的列(后缀除外),因此无法手动重命名。
示例:
set.seed(1)
dat <- data.frame(ID = 1:5,
speed.x.alpha = runif(5),
power.x.alpha = rpois(5, 1),
force.x.alpha = rexp(5),
speed.y.beta = runif(5),
power.y.beta = rpois(5, 1),
force.y.beta = rexp(5))
最后,数据框应具有以下列名称:
ID, alpha.speed.x, alpha.power.x, alpha.force.x, beta.speed.x, beta.power.x, force.power.x.
我强烈认为我需要一个 gsub/sub 表达式,它允许我 select 最后一个点之后的字符,然后我将其粘贴到 colnames,并最终从末尾删除。到目前为止还没有成功...
几个 gsub
和 paste0
就可以了:
gsub("y$", "x", gsub("(^.*)\.(.*a$)", paste0("\2", ".", "\1"), names(dat)))
[1] "ID" "alpha.speed.x" "alpha.power.x" "alpha.force.x" "beta.speed.x"
[6] "beta.power.x" "beta.force.x"
正则表达式中的()
捕获匹配子表达式的字符。 “\”用于匹配文字“.”并且“$”将表达式锚定到字符串的末尾。第二个参数将捕获的子表达式粘贴在一起。这个结果被提供给第二个 gsub
,如果找到一个 "x",它会用 "x" 替换结尾 "y"。
要重命名变量,请使用
names(dat) <- gsub("y$", "x", gsub("(^.*)\.(.*a$)", paste0("\2", ".", "\1"), names(dat)))
这是 sub
的一个选项。我们从字符串的开头 (^
) 匹配一个或多个不是 .
([^.]+
) 的字符,将其捕获为组 ((...)
- 在大括号内),后跟一个点(\.
- 请注意 .
是表示任何字符的元字符。因此,需要对其进行转义(\
)才能将其读取为文字字符或将其放在方括号内),后跟另一组不是点的字符(在第二个捕获组内),后跟另一个点和其余字符,直到字符串结尾。在替换中,我们更改捕获组的反向引用顺序以获得预期的输出。
names(dat) <- sub("^([^.]+)\.([^.]+)\.(.*)", "\3.\1.\2", names(dat))
names(dat)
#[1] "ID" "alpha.speed.x" "alpha.power.x" "alpha.force.x"
#[5] "beta.speed.y" "beta.power.y" "beta.force.y"
我想将列名的后缀移到其开头,使其成为其前缀。我有许多名称更改的列(后缀除外),因此无法手动重命名。
示例:
set.seed(1)
dat <- data.frame(ID = 1:5,
speed.x.alpha = runif(5),
power.x.alpha = rpois(5, 1),
force.x.alpha = rexp(5),
speed.y.beta = runif(5),
power.y.beta = rpois(5, 1),
force.y.beta = rexp(5))
最后,数据框应具有以下列名称:
ID, alpha.speed.x, alpha.power.x, alpha.force.x, beta.speed.x, beta.power.x, force.power.x.
我强烈认为我需要一个 gsub/sub 表达式,它允许我 select 最后一个点之后的字符,然后我将其粘贴到 colnames,并最终从末尾删除。到目前为止还没有成功...
几个 gsub
和 paste0
就可以了:
gsub("y$", "x", gsub("(^.*)\.(.*a$)", paste0("\2", ".", "\1"), names(dat)))
[1] "ID" "alpha.speed.x" "alpha.power.x" "alpha.force.x" "beta.speed.x"
[6] "beta.power.x" "beta.force.x"
正则表达式中的()
捕获匹配子表达式的字符。 “\”用于匹配文字“.”并且“$”将表达式锚定到字符串的末尾。第二个参数将捕获的子表达式粘贴在一起。这个结果被提供给第二个 gsub
,如果找到一个 "x",它会用 "x" 替换结尾 "y"。
要重命名变量,请使用
names(dat) <- gsub("y$", "x", gsub("(^.*)\.(.*a$)", paste0("\2", ".", "\1"), names(dat)))
这是 sub
的一个选项。我们从字符串的开头 (^
) 匹配一个或多个不是 .
([^.]+
) 的字符,将其捕获为组 ((...)
- 在大括号内),后跟一个点(\.
- 请注意 .
是表示任何字符的元字符。因此,需要对其进行转义(\
)才能将其读取为文字字符或将其放在方括号内),后跟另一组不是点的字符(在第二个捕获组内),后跟另一个点和其余字符,直到字符串结尾。在替换中,我们更改捕获组的反向引用顺序以获得预期的输出。
names(dat) <- sub("^([^.]+)\.([^.]+)\.(.*)", "\3.\1.\2", names(dat))
names(dat)
#[1] "ID" "alpha.speed.x" "alpha.power.x" "alpha.force.x"
#[5] "beta.speed.y" "beta.power.y" "beta.force.y"