2015-02-03 3 views
0

내 목표는 내 데이터 집합으로 두 값 (T/D)의 비율을 조정하는 것이지만 내 데이터 집합을 정리하는 가장 좋은 방법 인 것 같습니다. tidyr 같은 것을 사용합니다. 나는 모으고 분리 시키려고 노력하고 있지만 약간의 딸꾹질이 있었다.R 속성의 정리 된 데이터 집합을 사용하는 것이 동일하지 않습니다.

head(df9) 
> GeneID  D1  T1  D2  T2  D3  T3  D4  T4  D5  T5  D6  T6  D7  T7  D8  T8 
>1 A2M 8876.5 8857.9 10246.8 9453.9 6279.6 3846.5 8735.3 6609.9 7732.95 2452.4 8705.2 6679 7510.5 4318.3 8957.7 4092.4 
>2 ABL1 2120.8 1664.9 2525 1546.4 1993 1713.7 1849.7 1761.9 2297.7 2462.5 2698.2 1975.8 2480.3 1694.6 2471 1784.1 
>3 ACP1 1266.6 1347.1 910.95 725.1 1327.6 1589.5 1175 1086.9 1187.3 1065.15 1080 1048.2 1213.8 1337.9 831.5 814.1 

을하지만 나는 그것이 같이 할 : 데이터는 다음과 같습니다

> GeneID pt.num type value 
>ASM  1  D 8876 
>ASM  1  T 8857 

나는 다음을 시도했다. 그러나 나는 오류가 계속 발생합니다. 경고 메시지 : 속성은 변수간에 동일하지 않습니다. 그들은 떨어 뜨릴 것이다.

gather(df9, pt.num.type, value, 2:17, -GeneID) 
separate(pt.num.type, c("pt.num","type", 1)) 

데이터를 깨끗하게 만들 때 다음을 사용하여 T/D 비율을 얻고 싶습니다.

df10 <- ddply(df9, .(type), transform, Ratio=T/D) 

내 데이터를 정리하고 기능을 실행하는 것에 대한 조언은 크게 감사하겠습니다. 감사!

gather(df9, pt.num.type, value, 2:17) 
separate(pt.num.type, c("type", "pt.num"), sep=1) 

당신은 같은 것을 할 수 dplyr를 사용 : 당신이 (비율을 얻으려고 노력하는 경우 다음

df9 %>% 
    gather(pt.num.type, value, 2:5) %>% 
    separate(pt.num.type, c("type", "pt.num"), sep=1) %>% 
    group_by(GeneID, type) %>% 
    summarise(sum = sum(value)) 

# GeneID type sum 
# 1 A2M D 989 
# 2 A2M T 1033 
# 3 ABL1 D 464 
# 4 ABL1 T 170 
# 5 ACP1 D 1036 
# 6 ACP1 T 738 

+1

할 수 있습니까? dput (df9)'그리고 여기에 출력을 붙여 넣으시겠습니까? – JasonAizkalns

+0

엄청납니다. 그래서 뭔가 내 data.frame 잘못되어야합니다. R Studio는 하위 변수 "sample"을 17 개의 변수 중 3 개로 나열하지만 dput (샘플)은 너무 커서 여기에 게시 할 수 없습니다. –

+0

원본 데이터 파일에는 288 개의 변수가있는 859 개의 obs가 있습니다. –

답변

2

난 당신이 가까웠다 생각, 당신은 단지 sep 인수를 잘못 어떻게 분리하는지에 따라) 다음과 같이 할 수 있습니다 :

df9 %>% 
    gather(pt.num.type, value, 2:5) %>% 
    separate(pt.num.type, c("type", "pt.num"), sep=1) %>% 
    spread(type, value) %>% 
    mutate(Ratio = D/T) 

# GeneID pt.num D T  Ratio 
# 1 A2M  1 887 88 10.0795455 
# 2 A2M  2 102 945 0.1079365 
# 3 ABL1  1 212 16 13.2500000 
# 4 ABL1  2 252 154 1.6363636 
# 5 ACP1  1 126 13 9.6923077 
# 6 ACP1  2 910 725 1.2551724