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
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]]
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With