Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

R multiply columns by values in second dataframe

Tags:

dataframe

r

I have two dataframes: df1

plot   grass moss   rock    other     stuff  
a      4      0     0       text      3
b      2      2     3       text      4
c      10     0     0       text      0
d      3      1     0       text      9

and df2

Cover  value
grass   5
moss    2
rock    3

I would like to multiply the values in df1 by the corresponding value in df2. The solution should be applicable for a large dataset.

Result df3

plot  grass moss    rock    
a     20      0     0      
b     10      4     9      
c     50      0     0       
d     15      2     0      
like image 325
mace Avatar asked May 31 '26 16:05

mace


1 Answers

Your data:

df1 <- read.table(
  text = 
    "plot   grass moss   rock    other     stuff  
    a      4      0     0       text      3
    b      2      2     0       text      4
    c      10     0     0       text      0
    d      3      1     0       text      9",
  header = TRUE
)

df2 <- read.table(
  text = 
    "Cover  value
    grass   5
    moss    2
    rock    3",
  header           = TRUE,
  stringsAsFactors = FALSE
)

(Make sure that Cover is a character vector, not a factor, for this solution.)

A simple for loop does the trick:

df3 <- df1
for(i in seq_len(nrow(df2)))
{
  df3[, df2$Cover[i]] <- df2$value[i] * df1[, df2$Cover[i]]
}
like image 102
Richie Cotton Avatar answered Jun 03 '26 05:06

Richie Cotton