-2

欠損値の割合と「maf」という 2 つのパラメーターを使用してデータ セットを分割し、サブデータ セットをリストに保存しようとしています。これが私がやったことです(機能していません)。どんな助けでも大歓迎です、

ありがとう。

 library(BLR)
 library(missForest)
 data(wheat)

 X2<- prodNA(X, 0.4) ### creating missing values
 dim(X2)

 fd<-t(X2)  

 MAF<-function(geno){        ## markers are in the rows
 geno[(geno!=0) & (geno!=1) & (geno!=-1)] <- NA
 geno <- as.matrix(geno)
 ## calc_Freq for alleles
 n0 <- apply(geno==0,1,sum,na.rm=T)
 n1 <- apply(geno==1,1,sum,na.rm=T)
 n2 <- apply(geno==-1,1,sum,na.rm=T)
 n <- n0 + n1 + n2
 ## calculate allele frequencies
 p <- ((2*n0)+n1)/(2*n)
 q <- 1 - p
 maf  <- pmin(p, q)
 maf}

 frac.missing <- apply(fd,1,function(z){length(which(is.na(z)))/length(z)})

 maf<-MAF(fd)

 lst<-matrix()
 for (i in seq(0.2,0.7,by =0.2)){
 for (j in seq(0,0.2,by =0.005)){
 lst=fd[(maf>j)|(frac.missing < i),]
 }}
4

2 に答える 2

3

split関数が提供する結果が必要なようです。

ベクトルがある場合、「frac.missing」と「maf」は「fd」の値に基づいて定義されます (そして、fd の行数と同じ長さを持ちます)、これは分割を提供します。探している:

  spl.fd <- split(fd, list(maf, frac.missing) )

fdfor ループで指定されたバンドに基づいて、そのバンド内で値maf(fd)を「グループ化」したい場合frac.missing、同じsplit-construct が、現在のコードが達成できていないことを実行する可能性があります。

lst <- split( fd, list(cut(maf(fd), breaks = seq(0,0.2,by =0.005) , 
                                       include.lowest=TRUE), 
                       cut(frac.missing, breaks = seq(0.2,0.7,by =0.2),
                             right=TRUE,include.lowest=TRUE)
                        )
              )

右側の引数は、「<」演算子に基づいて分割したいという要望に対応しますが、デフォルトの操作のcut">" は「分割」に対する比較を前提としています。同様の機能を提供する他の関数はby.

于 2013-06-30T01:21:48.267 に答える
0

以下のコードは、私が必要とするものを正確に提供します:

Y<-t(GBS.binary)
nn<-colnames(Y)
fd<-Y
maf<-as.matrix(MAF(Y))
dff<-cbind(frac.missing,maf,Y)
colnames(dff)<-c("fm","maf",nn)
dff<-as.data.frame(dff)

for (i in seq(0.1,0.6,by=0.1)) { 
       for (j in seq(0,0.2,by=0.005)){  
              assign(paste("fm_",i,"maf_",j,sep=""),
                     (subset(dff, maf>j & fm <i))[,-c(1,2)])
                                }    }
于 2013-06-30T23:58:46.703 に答える