2017-09-28 11 views
-4

私は、数千の行と4列のRで大きなdata.frameを持っています。 例えば:列内の行名を置き換えます

Chromosome Start  End Count 
1 NC_031985.1 16255093 16255094  1 
2 NC_031972.1 11505205 11505206  1 
3 NC_031971.1 24441227 24441228  1 
4 NC_031977.1 29030540 29030541  1 
5 NC_031969.1 595867 595868  1 
6 NC_031986.1 40147812 40147813  1 

私は上記のような染色体の名前を持つ大規模な行列のすべての行名を交換して取得したい応じ

LG1  NC_031965.1 
LG2  NC_031966.1 
LG3a NC_031967.1 
LG3b NC_031968.1 
LG4  NC_031969.1 
LG5  NC_031970.1 
LG6  NC_031971.1 
LG7  NC_031972.1 
LG8  NC_031973.1 
LG9  NC_031974.1 
LG10 NC_031975.1 
LG11 NC_031976.1 
LG12 NC_031977.1 
LG13 NC_031978.1 
LG14 NC_031979.1 
LG15 NC_031980.1 
LG16 NC_031987.1 
LG17 NC_031981.1 
LG18 NC_031982.1 
LG19 NC_031983.1 
LG20 NC_031984.1 
LG22 NC_031985.1 
LG23 NC_031986.1 

染色体名で、このdata.frameを持っています:

Chromosome Start  End Count 
1 LG22  16255093 16255094  1 
2 LG7   11505205 11505206  1 
3 LG6   24441227 24441228  1 
4 LG12  29030540 29030541  1 
5 LG4   595867 595868  1 
6 LG23  40147812 40147813  1 

誰にも分かりにくいのですか? これは簡単かもしれませんが、Rの経験は限られています。

多くの感謝!

library(dplyr) 
df %>% 
    inner_join(chromo_names, by = c("Chromosome" = "V2")) %>% 
    select(Chromosome = V1, Start, End, Count) 

これは、二つの合併の列が異なる因子レベルを持つ警告メッセージを与える:人々が探している場合は、ここでコメントで述べたように

+0

希望の出力を含め、[再現可能な例](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)を入力してください。 – lmo

+0

biomartを試してください...しかし、あなたはhttps://www.biostars.org/でより多くの助けを受けるかもしれません。 – Jimbou

+0

私は質問を編集しました。 – Ioannis

答えて

0

dplyrソリューションです。あなたはそれを無視して文字で仕事をしたりのような要因にマージされた列を変換することができ、次のいずれか

merged = merge(df, chromo_names, 
       by.x = "Chromosome", 
       by.y = "V2", 
       sort = FALSE) 

merged = merged[c(5,2:4)] 
names(merged)[1] = "Chromosome" 

結果:

Chromosome Start  End Count 
1  LG22 16255093 16255094  1 
2  LG7 11505205 11505206  1 
3  LG6 24441227 24441228  1 
4  LG12 29030540 29030541  1 
5  LG4 595867 595868  1 
6  LG23 40147812 40147813  1 
ここ

df %>% 
    inner_join(chromo_names, by = c("Chromosome" = "V2")) %>% 
    select(Chromosome = V1, Start, End, Count) %>% 
    mutate(Chromosome = as.factor(Chromosome)) 

ベースRソリューションです。

データ:

df = read.table(text = " Chromosome Start End Count 
       1 NC_031985.1 16255093 16255094  1 
       2 NC_031972.1 11505205 11505206  1 
       3 NC_031971.1 24441227 24441228  1 
       4 NC_031977.1 29030540 29030541  1 
       5 NC_031969.1 595867 595868  1 
       6 NC_031986.1 40147812 40147813  1", header = TRUE) 

chromo_names = read.table(text = "LG1  NC_031965.1 
         LG2  NC_031966.1 
         LG3a NC_031967.1 
         LG3b NC_031968.1 
         LG4  NC_031969.1 
         LG5  NC_031970.1 
         LG6  NC_031971.1 
         LG7  NC_031972.1 
         LG8  NC_031973.1 
         LG9  NC_031974.1 
         LG10 NC_031975.1 
         LG11 NC_031976.1 
         LG12 NC_031977.1 
         LG13 NC_031978.1 
         LG14 NC_031979.1 
         LG15 NC_031980.1 
         LG16 NC_031987.1 
         LG17 NC_031981.1 
         LG18 NC_031982.1 
         LG19 NC_031983.1 
         LG20 NC_031984.1 
         LG22 NC_031985.1 
         LG23 NC_031986.1", header = FALSE) 
関連する問題