[R] For loop...

Berend Hasselman bhh at xs4all.nl
Sun Nov 4 16:16:00 CET 2012


On 04-11-2012, at 15:40, Bert Gunter wrote:

> But ...
> 
> On Sun, Nov 4, 2012 at 4:24 AM, Berend Hasselman <bhh at xs4all.nl> wrote:
>> 
>> On 04-11-2012, at 13:07, SHAILLY MEHROTRA wrote:
>> 
>>> Dear R-users,
>>> 
>>> I have dataset  with column A and B with1000 values,
>>> 
>>> For each of column C value (C = seq(1,1000,1), I want to repeat A and B
>>> values and calculate R = A+B*C for each row.
>>> 
>>> I want to get output as
>>> 
>>> A              B            C         R
>>> 1              10           1         11
>>> 2              30           1         32
>>> 3              50           1         53
>>> 1000       1000        1        2000
>>> 1              10           2        21
>>> 2               30          2        62
>>> 3               50          2        103
>>> 1000        1000       2        3000
>>> 
>>> How can I do it using for loop?
>>> 
>> 
>> You don't do that with a for loop.
>> You can do it like this, assuming your dataset is a data.frame and is named "dat"
>> 
>> 
>> dat["R"] <- dat["A"] + dat["B"]*dat["C"]
> 
> dat[["R"]] <- dat[["A"]] + dat[["B"]]*dat[["C"]]
> 
> would be better, I believe.
> 

Right.

I insert the reply  which was sent to me and not to the R-help list:

>  
> I think you misunderstood my question.
>  
> In my dataset, I have only two columns.( A and B with 1000 values each).
> I generated a variable C using seq(1,4200,20).
> Now for each value of C, I want to calculate 1000 R values (using 1000 - A and 1000 - B values)
> Finally, I want to have a dataset in which for each C value , I have 1000 R values.
>  
> So the  final dataset should have 210*1000 rows.
>  
> Hope it is clear now.
> 

Well try this then:

dat <- read.table(text="
A              B
1              10
2              30
3              50
1000         1000
1              10
2              30
3              50
1000         1000", header=TRUE)

dat[,"C"] <-  rep(1:2,each=nrow(dat)/2,length.out=nrow(dat))

dat[,"R"] <- unlist(lapply(split(dat,dat$C), FUN=function(x) x$A+x$B*x$C))
dat
 
Berend


> And the OP would be well-advised to read the Intro to R tutorial
> before posting further on this list.
> 
> To quote Rolf Turner on this list:
> 
> " Learn something about R; don't just hammer and hope.  Read the
> introductory manuals and scan the FAQ.."
> 
> -- Bert
> 
>> 
>> dat[,"R"] <- dat[,"A"] + dat[,"B"]*dat[,"C"]
>> 
>> Read the R intro manual.
>> 
>> Berend




More information about the R-help mailing list