R语言如何用mutate结合crossprod为数据框新增sumproduct计算列
报错原因
crossprod()要求输入为数值矩阵/向量类型,直接传入data.frame类对象会触发类型不匹配错误。
实现方法
方法1:基础R矩阵运算(推荐,效率最高)
直接将数据框转为矩阵后做矩阵乘法即可得到逐行乘积求和结果,适合大数据量场景:
dataframe <- data.frame(a = c(1, 1, 1), b = c(0, 1, 0), c = c(1, 1, 0)) nums <- c(100, 200, 300) # 新增d列 dataframe$d <- as.vector(as.matrix(dataframe) %*% nums)
运行结果中的d列值为c(400, 600, 100),完全符合需求。
方法2:dplyr管道写法(适合tidyverse代码流)
如果你的代码统一使用dplyr管道逻辑,可以在mutate中直接处理:
library(dplyr) dataframe <- dataframe %>% mutate(d = as.vector(as.matrix(.) %*% nums))
方法3:dplyr rowwise写法(可读性最高)
如果更看重代码可读性,不需要极致性能,可以用逐行运算的写法:
library(dplyr) dataframe <- dataframe %>% rowwise() %>% mutate(d = sum(c_across(everything()) * nums)) %>% ungroup()
内容的提问来源于stack exchange,提问作者dunbar111
相关产品推荐
相关产品推荐

