简体   繁体   English

将数据帧的每一列与 R 中该数据帧的另一列相乘

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM