Hello all, I am trying to figure out how to construct several new variables without having to write a code for each one. Specifically, I want to calculate ratios for several variables. For instance, let's say I have: df male1990 male1995 male2000 male2005 female1990 female1995 female2000 female2005 10 11 15 17 15 14 17 20 23 22 25 28 25 22 27 30 32 33 37 36 31 37 37 35 I want to calculate sex ratios for each of the years. Please note that this is an example. I want to calculate age-specific ratios for 5-year age groups, meaning that this will create a lot of variables. I am not well versed with looping functions and would appreciate it if someone provided some information and guidance as how to approach this. Thanks very much! Carlos -- View this message in context: http://r.789695.n4.nabble.com/create-multiple-variables-loop-tp3672921p3672921.html Sent from the R help mailing list archive at Nabble.com.
create multiple variables loop
2 messages · jour4life, Joshua Wiley
Hi Carlos,
Assuming your actual dataset has as nice a structure as your example
one, it is extremely easy:
## Your data (in convenient form using dput(df))
df <- structure(list(male1990 = c(10L, 23L, 32L), male1995 = c(11L,
22L, 33L), male2000 = c(15L, 25L, 37L), male2005 = c(17L, 28L,
36L), female1990 = c(15L, 25L, 31L), female1995 = c(14L, 22L,
37L), female2000 = c(17L, 27L, 37L), female2005 = c(20L, 30L,
35L)), .Names = c("male1990", "male1995", "male2000", "male2005",
"female1990", "female1995", "female2000", "female2005"), class =
"data.frame", row.names = c(NA,
-3L))
## the male column indices
i <- 1:4
## calculate the ratio
## (note the column names are probably not what you want)
df[, i]/df[, i + 4]
## another way (proportion of males)
df[, i]/(df[, i] + df[, i + 4])
If the structure is not quite so nice (for example there is not
information on both sexes for all years or the variables are not all
in order, etc.), you will need to do a bit more work to select the
proper column indices. The key is to make sure the dimensions of the
data frames/matrices match, then you can just add or divide on all of
them at once to get your ratios or whatever you want. No looping
required.
Hope this helps,
Josh
On Sat, Jul 16, 2011 at 9:58 PM, jour4life <jour4life at gmail.com> wrote:
Hello all, I am trying to figure out how to construct several new variables without having to write a code for each one. Specifically, I want to calculate ratios for several variables. For instance, let's say I have: df male1990 male1995 male2000 male2005 female1990 female1995 female2000 female2005 10 ? ? ? ? ? ? ?11 ? ? ? ? ? ? 15 ? ? ? ? ? ? 17 ? ? ? ? ? ? 15 14 ? ? ? ? ? ? ? 17 ? ? ? ? ? ? ?20 23 ? ? ? ? ? ? ?22 ? ? ? ? ? ? 25 ? ? ? ? ? ? 28 ? ? ? ? ? ? 25 22 ? ? ? ? ? ? ? 27 ? ? ? ? ? ? ?30 32 ? ? ? ? ? ? ?33 ? ? ? ? ? ? 37 ? ? ? ? ? ? 36 ? ? ? ? ? ? 31 37 ? ? ? ? ? ? ? 37 ? ? ? ? ? ? ?35 I want to calculate sex ratios for each of the years. Please note that this is an example. I want to calculate age-specific ratios for 5-year age groups, meaning that this will create a lot of variables. I am not well versed with looping functions and would appreciate it if someone provided some information and guidance as how to approach this. Thanks very much! Carlos -- View this message in context: http://r.789695.n4.nabble.com/create-multiple-variables-loop-tp3672921p3672921.html Sent from the R help mailing list archive at Nabble.com.
______________________________________________ R-help at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.
Joshua Wiley Ph.D. Student, Health Psychology University of California, Los Angeles https://joshuawiley.com/