[R] mean calculations from a dframe column
arun
smartpink111 at yahoo.com
Sun Apr 13 12:11:54 CEST 2014
Hi André,
Your codes were missing in some information. If your code looks like this:
Measure <- function(a, b) { a <- as.matrix(a) b <- as.matrix(b) Mean <- apply(a, 2, mean, na.rm = TRUE) somme <- c() for (i in seq_along(b)) somme[i] <- divide(Mean, b[i]) somme <- as.data.frame(somme) return(somme)
} MeanManqu <- function(a) apply(a, 2, mean, na.rm = TRUE)
divide <- function(a, b) { 100 - (b/a * 100)
}
df <- read.table(text="a b c d e f 1 1 4 1 2 54 2 2 33 2 56 32 3 3 5 3 87 24 4 NA NA 4 76 21",sep="",header=TRUE)
as.data.frame(divide(MeanManqu(as.matrix(df[,2])), df[,3]))
#divide(MeanManqu(as.matrix(df[, 2])), df[, 3])
#1 -100
#2 -1550
#3 -150
#4 NA
fun1 <- function(beginColumn, by, data) { indx <- seq(beginColumn, ncol(data), by = by) as.data.frame(t(100 - (t(data[, indx])/colMeans(data[, indx - 1], na.rm = TRUE)) * 100))
}
fun1(3,3,df)
# c f
#1 -100 2.262443
#2 -1550 42.081448
#3 -150 56.561086
#4 NA 61.990950
A.K.
Hello!! I am stucked..... I have a dataframe with missing values. I want to divide each cell of my data frame by the mean from the previous column. Nevertheless I have several columns. I have the code that works for comparing one column and the mean of the previous one, but how can i ask R to repaeat it for seveal columns? Here are the data: a b c d e f...... 1 1 4 1 2 54 2 2 33 2 56 32 3 3 5 3 87 24 4 NA NA 4 76 21 My idea is to create a new dataframe with for example: 100-(c/mean(b)*100) in one column, and the same for 100-(f/mean(e)*100) as results , etc. in this case column "a" and column "d" are just enumerating and are not useful. Here are my codes that are working for one trial only, but then.... Helppppp divide<-function(a,b) { 100-(b/a*100) MeanManqu<-apply(a,2,mean, na.rm=TRUE) > Measure<-function(a,b){ + a<-as.matrix(a) + b<-as.matrix(b) + Mean<-apply(a,2,mean, na.rm=TRUE) + somme <- c() +
+ for (i in seq_along(b) ) somme[i] <- divide(Mean,b[i]) + somme<-as.data.frame(somme) + return(somme) + } I tried several kind of loops and also apply, tapply... but failed I tried also something like that if it helps... as.data.frame(divide(MeanManqu(as.matrix(Data[,2])), Data[,3])) but this does work for only one trial... One of the codes I tried: MeasureGd<-function(C){ + + i<-c(3,6,9,12,15) #these are the columns i want to use for my analysis + somme<-c() + for (i in seq_along(C[,i])){ + + + + somme[i]<- as.data.frame(divide(MeanManqu(as.matrix(C[,i-1])), C[,i])) #dividing a column by the mean of the previous one... + + } + return(somme) + } If someone as an idea or the key of this problem, I would be more than grateful!!! André
More information about the R-help
mailing list