如何根据一些现有模式重命名R数据帧的列?

sfa*_*tor 2 r rename data-manipulation

我有一个数据框,其中包含许多带有长名称的列.我想重命名列,以便以后更容易使用,并希望将它们分组.

所以,如果列名是Subject1.ABCD123.Type1, Subject2ABCD123.Type1, ABCSubject1.ABCD123.Type2, XYZ.Subject3ABCD123.Type2等等.

我想把它们变成类似的东西 Subject1_Type1, Subject2_Type1, Subject1_Type2, Subject3_Type2 etc.

我怎么能在R中这样做?

Cat*_*ath 5

你可以使用sub:

colnames(yourdf) <- sub(".*(Subject\\d+).*(Type\\d+).*", "\\1_\\2", colnames(yourdf))
Run Code Online (Sandbox Code Playgroud)

在这里,您有两个对您感兴趣的模式:一个以"主题"开头,后跟一个数字,一个以"类型"开头,后跟一个数字.它们中的每一个都放在regex表达式(pattern函数的参数sub)中的括号之间,因此我们可以检索它们(使用\\1\\2)并在参数中使用它们replacement以获得我们想要的名称.

例:

sub(".*(Subject\\d+).*(Type\\d+).*", "\\1_\\2", c("Subject1.ABCD123.Type1", "Subject2ABCD123.Type1", "ABCSubject1.ABCD123.Type2", "XYZ.Subject3ABCD123.Type2"))
#[1] "Subject1_Type1" "Subject2_Type1" "Subject1_Type2" "Subject3_Type2"
Run Code Online (Sandbox Code Playgroud)