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)
$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.