[英]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.我想将数据框中一行的所有值与行尾的一列相乘。
eg multiply all rows by column mult (in my case there are 40 row, so an automatic solution for column selection would be nice) :例如,将所有行乘以列 mult(在我的情况下有 40 行,因此列选择的自动解决方案会很好):
id ID | val1 val1 | val2 val2 | val3 val3 | val4 val4 | mult多 | ... ... | newval1新瓦尔1 | newval2新瓦尔2 | ... ... |
---|---|---|---|---|---|---|---|---|---|
01 01 | 1 1 | 2 2 | 3 3 | 4 4 | 3 3 | 3 3 | 3 3 | 6 6 | ... ... |
02 02 | 1 1 | 2 2 | 3 3 | 4 4 | 6 6 | 6 6 | 6 6 | 12 12 | ... ... |
Thank you very much in advance and best regards!非常感谢您提前和最好的问候! :) :)
data.table
approach data.table
方法
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
In dplyr
, you can use across
: across
dplyr
中,您可以使用 cross :
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.