[R] loop through and modify multiple data frames
arun
smartpink111 at yahoo.com
Fri Jun 29 00:18:07 CEST 2012
Hello,
I tried loop to modify the list, but unfortunately it was not successful. But, I found another way to get the result you wanted (at least from what I understand).
#Here are the datasets
cats<-read.table(text="
name eats_kg
1 bob 3
2 garfield 4
3 chuck 6
", sep="",header=TRUE)
dogs<-read.table(text="
name eats_kg
1 gob 7
2 rofield 8
3 norris 9
4 rody 6
", sep="",header=TRUE)
birds<-read.table(text="
name eats_kg
1 jud 0.5
2 Trud 0.4
3 Sind 0.6
4 Rav 0.8
", sep="",header=TRUE)
mylist<-list(cats=cats,dogs=dogs,birds=birds)
mydf<-do.call("rbind",mylist)
price<-c(rep(20,3),rep(25,4),rep(15,4))
mydf$cost_food<-mydf$eats_kg*price
animal<-c(rep("cats",3),rep("dogs",4),rep("birds",4))
mydfnew<-data.frame(animal,mydf)
row.names(mydfnew)<-1:nrow(mydfnew)
mylistnew<-split(mydfnew,list(mydfnew$animal),drop=TRUE)
mylistnew1<-list(cats=mylistnew[[2]][-1],dogs=mylistnew[[3]][-1],birds=mylistnew[[1]][-1])
row.names(mylistnew1$dogs)<-1:nrow(mylistnew1$dogs)
row.names(mylistnew1$birds)<-1:nrow(mylistnew1$birds)
> mylistnew1
$cats
name eats_kg cost_food
1 bob 3 60
2 garfield 4 80
3 chuck 6 120
$dogs
name eats_kg cost_food
1 gob 7 175
2 rofield 8 200
3 norris 9 225
4 rody 6 150
$birds
name eats_kg cost_food
1 jud 0.5 7.5
2 Trud 0.4 6.0
3 Sind 0.6 9.0
4 Rav 0.8 12.0
There might be an easy way in loop to get the same result.
A.K.
----- Original Message -----
From: Jan Näs <jan at plattfot.com>
To: r-help at r-project.org
Cc:
Sent: Thursday, June 28, 2012 5:10 AM
Subject: [R] loop through and modify multiple data frames
Hi
Newbie question:
I have a set of data frames that I want to do the same calculations on each.
I've found out that I can put them in a list and loop through the list
to do the calculation, but not put the results back into each
data.frame..
For example three data frames cats, dogs, birds
where >cats
name eats_kg
1 bob 3
2 garfield 4
3 chuck 6
and dogs and birds are similar but not same length.
On each data frame I now want to add a column with cost of food by
calculating "eats_kg"*price of food.
So question is, can I put all data frames into one loop which returns
a new column for each?
Ive tried
MyList <- list(cast,dog,birds)
for(i in 1:length(MyList)){
price <- as.data.frame(myList[i])[,2] * cost
.. and then Im stuck. How can I put "price" back into each data frame?
Thanks in advance.
______________________________________________
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.
More information about the R-help
mailing list