Calculation of the average value when it is necessary to fulfill 2 conditions in R

I am trying to get the average age of men and women with different health conditions from my data structure.

AgeAnalyisi$Age num AgeAnalyisi$Gout logical AgeAnalyisi$Arthritis logical AgeAnalyisi$Vasculitis logical etc AgeAnalysis$Gender Factor w/ 2 levels 

I can get the average age individually using

 mean(AgeAnalysis$Age [AgeAnalysis$Gender=="M" & AgeAnalysis$Gout=="TRUE"] , na.rm = TRUE) 

but there’s a more eloquent way to combine all this into one table, so that middle-aged output is presented as

  Male Female Gout xx Arthritis xx Vasculitis xx etc xx 

thanks

+4
source share
2 answers

Here is the data.table solution

 library(data.table) AgeAnalyisis.DT <- data.table(AgeAnalyisis) AgeAnalyisis.DT[, lapply(.SD[, !"Age", with=FALSE], function(x) mean(Age[x])) , by=Gender] Gender Gout Arthritis Vasculitis 1: F 54.58333 52.00000 55.81818 2: M 50.09091 52.69231 52.40000 


If you want it to be transposed, you can use:

 # Save the results res <- AgeAnalyisis.DT[, lapply(.SD[, !"Age", with=FALSE], function(x) mean(Age[x])) , by=Gender] # Transpose, and assign Gender as column names results <- t(res[,!"Gender", with=FALSE]) colnames(results) <- res[, Gender] results # FM # Gout 58.30263 57.50328 # Arthritis 66.00217 67.91978 # Vasculitis 59.76155 57.86556 
+1
source

You can try the aggregate function:

 df <- data.frame(value=1:10, letter=rep(LETTERS[1:2], each=5), group=rep(c(1,2), times=5)) aggregate(value ~ letter * group, data=df, FUN=mean) # letter group value #1 A 1 3 #2 B 1 8 #3 A 2 3 #4 B 2 8 
+4
source

Source: https://habr.com/ru/post/1490134/


All Articles