r - 简化 R 代码:dlpylr mutate,根据单独数据框中的值乘以某些列
问题描述
我一直在尝试在 mutate 中进行乘法运算,使用不同 data.frame 中的值(它只有一行包含值),并将整个列与相同的列名相乘。我设法让它工作,但这是我能做到的唯一方法,而且看起来很乱。我想知道是否有人可以帮助我简化它。(最好以一种允许我将其保留在更大的 dpylr 链中的方式)。
prioritydata <- data[, -(3:16)] %>%
mutate(Q1 = as.numeric(Q1) * as.numeric(questionweighting$Q1),
Q2 = as.numeric(Q2) * as.numeric(questionweighting$Q2),
Q3 = as.numeric(Q3) * as.numeric(questionweighting$Q3),
Q4 = as.numeric(Q4) * as.numeric(questionweighting$Q4),
Q5 = as.numeric(Q5) * as.numeric(questionweighting$Q5),
Q6 = as.numeric(Q6) * as.numeric(questionweighting$Q6),
Q7 = as.numeric(Q7) * as.numeric(questionweighting$Q7),
Q8 = as.numeric(Q8) * as.numeric(questionweighting$Q8),
Q9 = as.numeric(Q9) * as.numeric(questionweighting$Q9),
Q10 = as.numeric(Q10) * as.numeric(questionweighting$Q10),
Q11 = as.numeric(Q11) * as.numeric(questionweighting$Q11),
Q12 = as.numeric(Q12) * as.numeric(questionweighting$Q12))
提前致谢。
解决方案
这是一个更好的选择。如果列都是数字并且具有相同的行数,则将两个数据集中的“Q”列子集,乘以相等大小的数据集并更新这些列的“数据”
nm1 <- paste0("Q", 1:12)
data[nm1] <- data[nm1] * questionweighting[nm1]
在tidyverse
中,这可以通过map2
library(dplyr)
library(purrr)
map2_df(data, questionweighting, ~ map2_at(vars(nm1), .x
.y , ~
as.numeric(.x) * as.numeric(.y)) %>%
bind_cols)
推荐阅读
- javascript - Javascript用单回车替换双回车
- azure-devops - 保留策略不会删除 Azure Devops 2019 版本
- javascript - 如何在线段上生成随机点?
- mysql - 如何检测导致违反外键约束的行?
- javascript - 循环中的 setTimeout() 不会在每次调用之间等待 3 秒
- google-drive-api - 与 Google Drive API 的集成可以处理自定义 MIMETypes 吗?
- r - 选择数据框中的一组值并将其值添加到 R 中另一个数据框的尾部
- css - 当我将鼠标悬停在链接上时希望切换图像
- python - 使用线程库的简单排序程序出现越界错误
- javascript - 缓冲二维数组,从第 2 行开始