immuen
immuen

Reputation: 53

multiply every column of a dataframe with another column of that dataframe in R

I would like to multiply all values of one row in a dataframe with one column at the end of the row.

e.g. multiply all rows by column mult (in my case there are 40 row, so an automatic solution for column selection would be nice) :

id val1 val2 val3 val4 mult ... newval1 newval2 ...
01 1 2 3 4 3 3 3 6 ...
02 1 2 3 4 6 6 6 12 ...

Thank you very much in advance and best regards! :)

Upvotes: 1

Views: 67

Answers (2)

Maël
Maël

Reputation: 51994

In dplyr, you can use across:

library(dplyr)
your_df %>% 
   mutate(across(starts_with("val"), ~ .x * mult, .names = "new{.col}"))

#  id val1 val2 val3 val4 mult newval1 newval2 newval3 newval4
#1  1    1    2    3    4    3       3       6       9      12
#2  2    1    2    3    4    6       6      12      18      24

Upvotes: 1

Wimpel
Wimpel

Reputation: 27732

data.table approach

library(data.table)
DT <- fread("id val1 val2 val3 val4 mult
01 1 2 3 4 3
02 1 2 3 4 6")

#cols to multiply
multCols <- names(DT)[grepl("^val", names(DT))]
#create new multiplied
DT[, paste0("new",multCols) := lapply(.SD, `*`, mult), .SDcols = multCols][]
#    id val1 val2 val3 val4 mult newval1 newval2 newval3 newval4
# 1:  1    1    2    3    4    3       3       6       9      12
# 2:  2    1    2    3    4    6       6      12      18      24

Upvotes: 2

Related Questions