2017-09-28 3 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 

나는 염색체 이름이 data.frame을 따라

내가 위에 나열된 얻을로 염색체 이름으로 큰 행렬의 모든 행 이름을 대체 할
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 

:

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) 
관련 문제