r - 将数据框中的所有列乘以单列

标签 r

我知道这是一个基本问题,但找不到任何解决方案。
我想将数据帧的所有列乘以单列。

df1<-data.frame(F1=c(1,5,8,9),F2=c(1,5,8,9),F3=c(1,5,8,9))
> df1
  F1 F2 F3
1  1  1  1
2  5  5  5
3  8  8  8
4  9  9  9

C<-data.frame(C=c(2,1,2,0.5))
> C
    C
1 2.0
2 1.0
3 2.0
4 0.5

我想将 df1 的每一列相乘通过 C。
我试过了:
df2<-df1[,c(1:3)]*C[,1]
df2<-df1*C
df2< df1%*%C
and
for(i in 2:length(names(b))) {
+     df2 <- C[, 1] * b[, i]
+ }

谢谢!

最佳答案

也试试

df1 * t(C)
#    F1   F2   F3
#1  2.0  2.0  2.0
#2  5.0  5.0  5.0
#3 16.0 16.0 16.0
#4  4.5  4.5  4.5

当我们尝试将数据帧相乘时,它们的大小必须相同。
df1 * C

error in Ops.data.frame(df1, C) : ‘*’ only defined for equally-sized data frames


t()C转换为矩阵,即维度属性长度为 4 的向量。当我们将其与 df1 相乘时,该向量会被回收。 .

什么也可以以相同的方式工作(并且可能比转置 C 更快):
df1 * C$C

或者
df1 * unlist(C)

关于r - 将数据框中的所有列乘以单列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53705656/

相关文章:

R:在数据框中将分数转换为小数

r - 如何在 R 中使用 gsub 从字符串中删除非数字字符?

r - 使用 purrr::walk 保存文件 - 无效的 'description' 参数

使用数据框按键重命名列表元素

r - 将文档术语矩阵转换为包含大量数据的矩阵会导致溢出

r - 根据像素值匹配 R 中的图像

r - override.aes 与列表参数的命名向量

r - R 中基于另一列的组合

r - 为向量中的标识符和 R 中的(向量)列表之间的每个连接创建 data.frame

使用正则表达式替换重复的字符组