Hi:

Perhaps you had something like this in mind:

df<-data.frame(a1=1:10, a2=11:20, a3=21:30, b1=101:110, b2=111:120,
b3=121:130)
avars <- names(df)[grep('^a', names(df))]
bvars <- names(df)[grep('^b', names(df))]
cvars <- paste('c', 1:length(avars), sep = '')
df <- within(df, for(i in seq_along(cvars)) assign(cvars[i],
get(avars[i])/get(bvars[i])))
> df
   a1 a2 a3  b1  b2  b3        c3        c2         c1 i
1   1 11 21 101 111 121 0.1735537 0.0990991 0.00990099 3
2   2 12 22 102 112 122 0.1803279 0.1071429 0.01960784 3
3   3 13 23 103 113 123 0.1869919 0.1150442 0.02912621 3
4   4 14 24 104 114 124 0.1935484 0.1228070 0.03846154 3
5   5 15 25 105 115 125 0.2000000 0.1304348 0.04761905 3
6   6 16 26 106 116 126 0.2063492 0.1379310 0.05660377 3
7   7 17 27 107 117 127 0.2125984 0.1452991 0.06542056 3
8   8 18 28 108 118 128 0.2187500 0.1525424 0.07407407 3
9   9 19 29 109 119 129 0.2248062 0.1596639 0.08256881 3
10 10 20 30 110 120 130 0.2307692 0.1666667 0.09090909 3

This should be extensible to any number of a* and b* variables, assuming
that the length of avars and bvars must be the same, because it's not
checked for above...nor is it checked that any value among the b* variables
is zero.

HTH,
Dennis

On Fri, Mar 4, 2011 at 4:37 PM, Al Roark <hrbuil...@hotmail.com> wrote:

>
> Hi all,
>
> I frequently encounter datasets that require me to repeat the same
> calculation across many variables. For example, given a dataset with total
> employment variables and manufacturing employment variables for the years
> 1990-2010, I might have to calculate manufacturing's share of total
> employment in each year. I find it cumbersome to have to manually define a
> share for each year and would like to know how others might handle this kind
> of task.
>
> For example, given the data frame:
>
> df<-data.frame(a1=1:10, a2=11:20, a3=21:30, b1=101:110, b2=111:120,
> b3=121:130)
>
> I'd like to append new variables--c1, c2, and c3--to the data frame that
> are the result of a1/b1, a2/b2, and a3/b3, respectively.
>
> When there are only a few of these variables, I don't really have a
> problem, but it becomes a chore when the number of variables increases. Is
> there a way I can do this kind of processing using a loop? I tried defining
> a vector to hold the names for the "c variables" (e.g. c1,c2, ... cn) and
> creating new variables in a loop using code like:
>
> avars<-c("a1","a2","a3")
> bvars<-c("b1","b2","b3")
> cvars<-c("c1","c2","c3")
> for(i in 1:3){
>  df$cvars[i]<-df$avars[i]/df$bvars[i]
> }
>
> But the variable references don't resolve properly with this particular
> syntax.
>
> Any help would be much appreciated. Cheers.
>        [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help@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.
>

        [[alternative HTML version deleted]]

______________________________________________
R-help@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.

Reply via email to