4

私はデータフレームを持っています。その始まりは以下の通りです:

                                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 など、列の名前で最も重要な情報は、文字列の 4 番目の文字です。この場合はHです。私がやりたいのは、4番目の文字が「H」または「K」の場合は「SM」の部分を「Control」に変更し、4列目が「X」または「K」の場合は「Case」に変更することです。 「V」。それ以外は名前のままでいいと思います。最終的には、次のようなテーブルが必要です。

                        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

4文字目が「V」「X」「K」「H」のいずれかは完全ランダムとなりますのでご注意ください。

助けていただければ幸いです!ありがとう。

4

2 に答える 2

4

一方通行、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) <- sapply(names(x),function(z) {
    if(substring(z,4,4) %in% c("H","K"))
        sub("SM","Control",z)
    else if(substring(z,4,4) %in% c("X","V"))
        sub("SM","Case",z)
})
于 2013-07-31T12:33:39.847 に答える