In R, how to take the mean of a varying number of elements for each row in a data frame? -
so have dataframe, pvalues, this:
pvals <- read.csv(textconnection("pval1 pval2 pval3 0.1 0.04 0.02 0.9 0.001 0.98 0.03 0.02 0.01"),sep = " ") that corresponds dataframe, data, this:
data <- read.csv(textconnection("col1 col2 co3 10 2 9 11 20 200 2 3 5"),sep=" ") for every row in data, i'd take mean of numbers indices correspond entries in pvalues <= 0.05.
so, example, first row in pvalues has 2 entries <= 0.05, entries in [1,2] , [1,3]. therefore, first row of data, want take mean of 2 , 9.
in second row of pvalues, entry [2,2] <=0.05, instead of taking mean second row of data, use data[20,20].
so, output like:
means 6.5 20 3.33 i thought might able generate indices every entry in pvalues <=0.05, , use select entries in data use mean. tried use command generate indices:
exp <- which(pvalues[,]<=0.05, arr.ind=true) ...but picks on indices entries first column <=0.05. in example above, output [3,1].
can see i'm doing wrong, or have ideas on how tackle problem?
thank you!
it's bit funny looking, should work
rowmeans(`is.na<-`(data,pvalues>=.05), na.rm=t) the "ugly" part calling is.na<- without doing automatic replacement, here set data p-values larger .05 missing , take row means.
it's unclear me doing exp, type of method work well. maybe with
expx <- which(pvalues[,]<=0.05, arr.ind=true) aggregate(val~row, cbind(expx,val=data[exp]), mean) (renamed not interfere built in exp() function)
tested with
pvalues<-read.table(text="pval1 pval2 pval3 0.1 0.04 0.02 0.9 0.001 0.98 0.03 0.02 0.01", header=t) data<-read.table(text="col1 col2 co3 10 2 9 11 20 200 2 3 5", header=t)
Comments
Post a Comment