String R:如何根据规范更改数据框中的列名

String R:如何根据规范更改数据框中的列名,string,r,dataframe,multiple-columns,bioinformatics,String,R,Dataframe,Multiple Columns,Bioinformatics,我有一个数据框,它的开头如下: SM_H1455 SM_V1456 SM_K1457 SM_X1461 SM_K1462 ENSG00000000419.8 290 270 314 364 240 ENSG00000000457.

我有一个数据框,它的开头如下:

                                SM_H1455          SM_V1456          SM_K1457      SM_X1461          SM_K1462
ENSG00000000419.8                290               270               314               364               240
ENSG00000000457.8                252               230               242               220               106
ENSG00000000460.11               154               158               162               136                64
ENSG00000000938.7              20106             18664             19764             15640             19024
ENSG00000000971.11                30                10                 4                 2                10
请注意,还有更多的列和行

我想做的是:我想更改列的名称。列名称中最重要的信息(例如SM_H1455)是字符串的第四个字符。在本例中,它是一个H。我想做的是,如果第四个字符是“H”或“K”,则将“SM”部分改为“Control”,如果第四列是“X”或“V”,则将“case”部分改为“Control”。我想把其他一切都记在名字里。最后,我想要一张这样的桌子:

                        Control_H1455          Case_V1456        Control_K1457      Case_X1461        Control_K1462
ENSG00000000419.8                290               270               314               364               240
ENSG00000000457.8                252               230               242               220               106
ENSG00000000460.11               154               158               162               136                64
ENSG00000000938.7              20106             18664             19764             15640             19024
ENSG00000000971.11                30                10                 4                 2                10
请记住,第四个字符是“V”、“X”、“K”还是“H”是完全随机的


我将感谢任何帮助!谢谢。

单向,其中
x
是您的df:

controls <- which(substring(names(x),4,4) %in% c("H","K"))
cases <- which(substring(names(x),4,4) %in% c("X","V"))
names(x)[controls] <- gsub("SM","Control",names(x)[controls])
names(x)[cases] <- gsub("SM","Case",names(x)[cases])
控制一行备选方案:

names(x) <- sub("^..(.(H|K))", "Control\\1", sub("^..(.(X|V))", "Case\\1", names(x))

name(x)再次非常感谢!!:-)此解决方案将比使用
子字符串
函数快得多。
names(x) <- sub("^..(.(H|K))", "Control\\1", sub("^..(.(X|V))", "Case\\1", names(x))