-->

GoogleSearch



Scientist. Husband. Daddy. --- TOLLE. LEGE
외부자료의 인용에 있어 대한민국 저작권법(28조)과 U.S. Copyright Act (17 USC. §107)에 정의된 "저작권물의 공정한 이용원칙 | the U.S. fair use doctrine" 을 따릅니다. 저작권(© 최광민)이 명시된 모든 글과 번역문들에 대해 (1) 복제-배포, (2) 임의수정 및 자의적 본문 발췌, (3) 무단배포를 위한 화면캡처를 금하며, (4) 인용 시 URL 주소 만을 사용할 수 있습니다. [후원 | 운영] [대문으로] [방명록] [옛 방명록] [티스토리 (백업)]

이 블로그 검색

[R] How to average duplicated id

라벨:




> dat = read.table(text="
 gene_id symbol array1 array2
 1  763938      A     10     10
 2  763979      B     20     20
 3 1273243      C    100    100
 4  764169      C    200    200
 5 1273433      B     30     30
 ", sep="",header=TRUE,stringsAsFactors=FALSE) 
> dat
  gene_id symbol array1 array2
1  763938      A     10     10
2  763979      B     20     20
3 1273243      C    100    100
4  764169      C    200    200
5 1273433      B     30     30



> t
  gene_id symbol array1 array2
1  763938      A     10     10
2  763979      B     20     20
3 1273243      C    100    100
4  764169      C    200    200
5 1273433      B     30     30

t = read.table( file="test2.txt", header=T)

##
## do not keep gene id
##

with(t,aggregate(t[,3:4],list(symbol),FUN=mean)) 
aggregate(t[,3:4], list(t$symbol), mean) 

> aggregate(t[,3:4], list(t$symbol), mean) 
  Group.1 array1 array2
1       A     10     10
2       B     25     25
3       C    150    150


> do.call(rbind,lapply(lapply(split(t,t$symbol),`[`,3:4),colMeans)) 
  array1 array2
A     10     10
B     25     25
C    150    150



##
## keep dup. id
##

t = read.table( file="test2.txt", header=T)

for( i in 3:4) {
  av = ave(t[,i], t$symbol) 
  t[,i] = av
}

> t
  gene_id symbol array1 array2
1  763938      A     10     10
2  763979      B     25     25
3 1273243      C    150    150
4  764169      C    150    150
5 1273433      B     25     25




dat1<-read.table(text="
            gene_id sample_1 sample_2   FL_EARLY  FL_LATE
763938  Eucgr.A00054   fl_S1E   fl_S1L  13.170800  22.2605
763979  Eucgr.A00101   fl_S1E   fl_S1L   0.367960  14.1202
1273243 Eucgr.A00101    fl_S2   fl_S1L   0.356625  14.1202
764169  Eucgr.A00350   fl_S1E   fl_S1L   7.381070  43.9275
1273433 Eucgr.A00350    fl_S2   fl_S1L  10.674500  43.9275
1273669 Eucgr.A00650    fl_S2   fl_S1L  33.669100  50.0169
764480  Eucgr.A00744   fl_S1E   fl_S1L 132.429000 747.2770
1273744 Eucgr.A00744    fl_S2   fl_S1L 142.659000 747.2770
764595  Eucgr.A00890   fl_S1E   fl_S1L   2.937760  14.9647
764683  Eucgr.A00990   fl_S1E   fl_S1L   8.681250  48.5492
1273947 Eucgr.A00990    fl_S2   fl_S1L  10.553300  48.5492
764710  Eucgr.A01020   fl_S1E   fl_S1L   0.000000  57.9273
1273974 Eucgr.A01020    fl_S2   fl_S1L   0.000000  57.9273
764756  Eucgr.A01073   fl_S1E   fl_S1L   8.504710 101.1870
1274020 Eucgr.A01073    fl_S2   fl_S1L   5.400010 101.1870
764773  Eucgr.A01091   fl_S1E   fl_S1L   3.448910  15.7756
764826  Eucgr.A01152   fl_S1E   fl_S1L  69.565700 198.2320
764831  Eucgr.A01158   fl_S1E   fl_S1L   7.265640  30.9565
764845  Eucgr.A01172   fl_S1E   fl_S1L   3.248020  16.9127
764927  Eucgr.A01269   fl_S1E   fl_S1L  18.710200  76.6918
",sep="",header=TRUE,stringsAsFactors=FALSE)


dat$FL_EARLY<-unlist(lapply(lapply(split(dat,dat$gene_id),`[`,4),function(x) rep(colMeans(x),each=nrow(x))),use.names=F) 


ref: http://r.789695.n4.nabble.com/average-duplicated-rows-td4646006.html





라벨:





Scientist. Husband. Daddy. --- TOLLE. LEGE
외부자료의 인용에 있어 대한민국 저작권법(28조)과 U.S. Copyright Act (17 USC. §107)에 정의된 "저작권물의 공정한 이용원칙 | the U.S. fair use doctrine" 을 따릅니다. 저작권(© 최광민)이 명시된 모든 글과 번역문들에 대해 (1) 복제-배포, (2) 임의수정 및 자의적 본문 발췌, (3) 무단배포를 위한 화면캡처를 금하며, (4) 인용 시 URL 주소 만을 사용할 수 있습니다. [후원 | 운영] [대문으로] [방명록] [옛 방명록] [티스토리 (백업)] [신시내티]

-