Function with a dataframe input

I have a bunch of datasets i need to extract data from, at first I just wrote a bunch of code and copy pasted with changed variable names once I got it working, but I have enough datasets that I need to be able to write a function to efficiently go through the data. My datasets are all in roughly the same format with some just having a few more rows, but the same column names.

Female <- c(1,3,2,5)
Male <- c(2,1,4,3)
Role <- c("Level A Junior","Level A Assistant","Level B Senior", "Level C")
df1 <- data.frame(Role,Female,Male)

Get_Percentages <- function(df){
Level_A <- df[grep("Level A", Role),]
Level_B <- df[grep("Level B", Role),]
Level_C <- df[grep("Level C", Role),]

total_A_Fem <- sum(Level_A$Female)
total_B_Fem <- sum(Level_B$Female)
total_C_Fem <- sum(Level_C$Female)

total_A_Mal <- sum(Level_A$Male)
total_B_Mal <- sum(Level_B$Male)
total_C_Mal <- sum(Level_C$Male)

totalFemByLevel <- c(total_A_Fem,total_B_Fem,total_C_Fem)
totalMalByLevel <- c(total_A_Mal,total_B_Mal,total_C_Mal)
totalByLevel <- totalFemByLevel+totalMalByLevel

percentByLevelFem <- round(totalFemByLevel / totalByLevel * 100)
percentByLevelMal <- round(totalMalByLevel / totalByLevel * 100)
}
Get_Percentages(df1)

this is my test code that isnt outputting what I want

we don't know what you want and you haven't told us... Here is a guess.

Female <- c(1,3,2,5)
Male <- c(2,1,4,3)
Role <- c("Level A Junior","Level A Assistant","Level B Senior", "Level C")
df1 <- data.frame(Role,Female,Male)

Get_Percentages <- function(df){
  Level_A <- df[grep("Level A", Role),]
  Level_B <- df[grep("Level B", Role),]
  Level_C <- df[grep("Level C", Role),]
  
  total_A_Fem <- sum(Level_A$Female)
  total_B_Fem <- sum(Level_B$Female)
  total_C_Fem <- sum(Level_C$Female)
  
  total_A_Mal <- sum(Level_A$Male)
  total_B_Mal <- sum(Level_B$Male)
  total_C_Mal <- sum(Level_C$Male)
  
  totalFemByLevel <- c(total_A_Fem,total_B_Fem,total_C_Fem)
  totalMalByLevel <- c(total_A_Mal,total_B_Mal,total_C_Mal)
  totalByLevel <- totalFemByLevel+totalMalByLevel
  
  percentByLevelFem <- round(totalFemByLevel / totalByLevel * 100)
  percentByLevelMal <- round(totalMalByLevel / totalByLevel * 100)

  data.frame(percentByLevelFem = percentByLevelFem,
             percentByLevelMal = percentByLevelMal
             )

}
Get_Percentages(df1)

This topic was automatically closed 21 days after the last reply. New replies are no longer allowed.