Annika
Annika

Reputation: 49

rowwise multiplication of two different dataframes dplyr

I have two dataframes and I want to multiply one column of one dataframe (pop$Population) with parts of the other dataframe, sometimes with the mean of one column or a subset (here e.g.: multiplication with mean of df$energy). As I want to have my results per Year i need to additionally multiply it by 365 (days). I need the results for each Year.

age<-c("6 Months","9 Months", "12 Months")
energy<-c(2.5, NA, 2.9) 
Df<-data.frame(age,energy) 

Age<-1
Year<-c(1990,1991,1993, 1994)
Population<-c(200,300,400, 250)
pop<-data.frame(Age, Year,Population)

pop:
 Age Year Population
1   1 1990        200
2   1 1991        300
3   1 1993        400
4   1 1994        250

df:
        age energy
1  6 Months    2.5
2  9 Months     NA
3 12 Months    2.9


my thoughts were, but I got an Error:

pop$energy<-pop$Population%>%
  rowwise()%>%
  transmute("energy_year"= .%*% mean(Df$energy, na.rm = T)%*%365)

Error in UseMethod("rowwise") : 
  no applicable method for 'rowwise' applied to an object of class "c('double', 'numeric')"

I wished to result in a dataframe like this:

  Age Year Population energy_year
1   1 1990        200      197100
2   1 1991        300      295650
3   1 1993        400      394200
4   1 1994        250      246375

Upvotes: 0

Views: 192

Answers (1)

royr2
royr2

Reputation: 2289

pop$Population is a vector and not a data frame hence the error.

For your use case the simplest thing to do would be:

pop %>% mutate(energy_year= Population * mean(Df$energy, na.rm = T) * 365)

This will give you the output:

Age Year Population   energy_year
1   1 1990        200 197100
2   1 1991        300 295650
3   1 1993        400 394200
4   1 1994        250 246375

Upvotes: 1

Related Questions