This is my dataframe
df <- data.frame(Var=c("Var1", "Var1","Var1","Var1","Var1","Var1"),
measure=c("M1","M1","M1","M1","M1","M1"),
grType = c("Sex","Sex","Agegr","Agegr","Agegr","Agegr"),
gr=c('Male', 'Female', '<20', '20-39', '40-69', '70+'),
dem=c(39, 42, 11, 19, 22, 29),
num=c(22, 19, 3, 11, 15, 12))
I want to add a new row as total grType and recode age groups in <40 and 40+. my desired output should look like:
df <- data.frame(Var=c("Var1", "Var1","Var1","Var1","Var1","Var1","Var1","Var1","Var1"),
measure=c("M1","M1","M1","M1","M1","M1","M1","M1","M1"),
grType = c("Sex","Sex","Agegr","Agegr","Agegr","Agegr","newAgegr","newAgegr", "Total"),
gr=c('Male', 'Female', '<20', '20-39', '40-69', '70+', "<40", "40+", "Total"),
dem=c(39, 42, 11, 19, 22, 29, 30, 49, 81),
num=c(22, 19, 3, 11, 15, 12,14,27,41))
I tried the following but not working
df <- rbind(df, c("Var1", "M1", "Agegr", "<40", sum(df[df$gr %in% c('<20', '20-39'), "dem"]), sum(df[df$gr %in% c('<20', '20-39'), "num"])))
df <- rbind(df, c("Var1", "M1", "newAgegr", "40+", df[df$grType == "Total", "dem"] - df[df$grType == "Agegr", "dem"], df[df$grType == "Total", "num"] - df[df$grType == "Agegr", "num"]))
df <- rbind(df, c("Var1", "M1", "Total", "Total", sum(df[df$grType %in% c("Sex", "newAgegr"), "dem"]), sum(df[df$grType %in% c("Sex", "newAgegr"), "num"])))
But received some error
Error in sum(df[df$gr %in% c("<20", "20-39"), "dem"]) : invalid 'type' (character) of argument
Perhaps this is a good start, using
dplyr: