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

How to rename columns of R dataframe based on some existing pattern?

我有一个数据框,其中包含很多名称较长的列。我想重命名这些列,以便以后更容易使用它们,并想将它们分组。

因此,如果列名类似于 Subject1.ABCD123.Type1, Subject2ABCD123.Type1, ABCSubject1.ABCD123.Type2, XYZ.Subject3ABCD123.Type2

我想把它们改成类似Subject1_Type1, Subject2_Type1, Subject1_Type2, Subject3_Type2 etc.

的东西

我如何在 R 中执行此操作?

您可以使用 sub:

colnames(yourdf) <- sub(".*(Subject\d+).*(Type\d+).*", "\1_\2", colnames(yourdf))

在这里,您有 2 个您感兴趣的模式:一个以 "Subject" 开头,后跟一个数字,另一个以 "Type" 开头,后跟一个数字。它们中的每一个都放在 regex 表达式(函数 sub 的参数 pattern)中的括号之间,因此我们可以检索它们(使用 \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"