R语言中如何对数据框执行矩阵乘法并命名结果列
问题原因
R中%*%矩阵运算符仅支持数值型矩阵、数值向量作为运算输入,数据框是基于列表实现的特殊对象,即使所有列均为数值类型,也无法直接传入%*%完成运算,只需在运算前做简单类型转换即可,同时可直接指定结果列名。
实现方案
方案1:临时转换数据框为矩阵运算(最直观通用,适合新手)
不需要修改原始数据框对象,运算时用as.matrix()将数据框转为数值矩阵即可,运算完成后直接设置列名:
# 执行矩阵乘法 result <- as.matrix(df) %*% beta # 为结果列指定名称 colnames(result) <- "df_beta"
最终输出的result是5行1列的数值矩阵,列名为df_beta,计算结果如下:
df_beta [1,] 107 [2,] 117 [3,] 75 [4,] 113 [5,] 155
如果需要把计算结果直接作为新列合并到原数据框,连单独设置列名的步骤都可以省略:
df$df_beta <- as.matrix(df) %*% beta
方案2:用矩阵内积函数运算(大数据量下效率更高)
当数据框行数达到十万、百万级时,用R内置的矩阵内积函数计算比直接调用%*%运行速度更快,写法如下:
df_mat <- as.matrix(df) result <- crossprod(t(df_mat), beta) colnames(result) <- "df_beta"
计算结果和方案1完全一致。
注意:不要尝试直接对未转成矩阵的数据框做
%*%运算,即使通过as.data.frame()重复转换类型也无效,必须转为matrix类型才能被矩阵运算符识别。
内容的提问来源于stack exchange,提问作者Lee
相关产品推荐
相关产品推荐

