I´d like to calculate mean and sd from a dataframe with one column for the parameter and one column for a group identifier. How can I calculate them when using tapply
? I could use sd(v1, group, na.rm=TRUE)
, but can´t fit the na.rm=TRUE
into the statement when using tapply
.
omit.na
is no option. I have a whole bunch of parameters and have to go through them step by step without losing half of the dataframe when excluding all lines with one missing value.
data("weightgain", package = "HSAUR")
tapply(weightgain$weightgain, list(weightgain$source, weightgain$type), mean)
The same holds true for the by
statement.
x<-c(1,2,3,4,5,6,7,8,9,NA)
y<-c(2,3,NA,3,4,NA,2,3,NA,2)
group<-rep((factor(LETTERS[1:2])),5)
df<-data.frame(x,y,group)
df
by(df$x,df$group,summary)
by(df$x,df$group,mean)
sd(df$x) #result: NA
sd(df$x, na.rm=TRUE) #result: 2.738613
Any ideas how to get this done?
Suppose that your data frame contains some NA values in its columns. Within the tapply function you can specify additional arguments of the function you are applying, after the FUN argument. In this case, the mean function allows you to specify the na. rm argument to remove NA values.
tapply in R. Apply a function to each cell of a ragged array, that is to each (non-empty) group of values given by a unique combination of the levels of certain factors. Basically, tapply() applies a function or operation on subset of the vector broken down by a given factor variable.
By default, if the applied function returns a scalar, then tapply returns a vector. In this case we are applying the mean function, so the output of tapply is a numeric vector.
Argument na. rm gives a simple way of removing missing values from data if they are coded as NA . In base R its standard default value is FALSE , meaning, NA 's are not removed.
Simply set na.rm=TRUE
in the tapply
function:
tapply(weightgain$weightgain, list(weightgain$source, weightgain$type), mean, na.rm=TRUE)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With