【问题标题】:Multiply a specific column with multiple columns in a data frame in R [duplicate]将特定列与R中数据框中的多列相乘[重复]
【发布时间】:2018-02-04 21:27:09
【问题描述】:

我是 R 新手。我的数据如下所示:

df <- data.frame(a=c(1, 1, 2, 3, 8, 9, 1, 3), b = c(5, 4, 3, 8, 6, 1, 0, 2), x = c(4, 3, 8, 9, 1, 8, 2, 3))
> df
  a b x
1 1 5 4
2 1 4 3
3 2 3 8
4 3 8 9
5 8 6 1
6 9 1 8
7 1 0 2
8 3 2 3

我需要编写一个函数来将列x 与其他列相乘(这里只是ab,但我有30-40)。

目前我已经编写了一个 for 循环,它一次在列上进行乘法运算。我需要帮助来对它进行矢量化并同时进行计算。

【问题讨论】:

  • 您想将所有列与x 中的条目相乘(即a*xb*x、...),还是要将所有列相乘(即a*b*...*x) ?
  • 非常简单。 df$mult &lt;- df$a * df$b * df$x 会为你工作。
  • 如果你只有数字,你应该考虑矩阵而不是 data.frame
  • @MauritsEvers 我想将 x 与其他列相乘 - ax | bx |...
  • @RolandASc 是的,所有列都只有数字。如何处理矩阵?

标签: r apply lapply


【解决方案1】:

您可以在dplyr 包中的mutate 的帮助下做到这一点:

df <- df %>% mutate(mul = a * b * x)

df
  a b x mul
1 1 5 4  20
2 1 4 3  12
3 2 3 8  48
4 3 8 9 216
5 8 6 1  48
6 9 1 8  72
7 1 0 2   0
8 3 2 3  18

【讨论】:

    【解决方案2】:

    您可以简单地提取列并乘以矩阵。在这种情况下,“x”是您要使用的列。

    multiply <- function(df, x) { 
      ## extract the objetive column
      df1 = df[, -x]
      col = df[, x]
      df1 * col
    }
    

    导致:

    multiply(df, 3)
       a  b
    1  4 20
    2  3 12
    3 16 24
    4 27 72
    5  8  6
    6 72  8
    7  2  0
    8  9  6
    

    【讨论】:

      【解决方案3】:

      或申请

      sapply( df , FUN= function(xxx ){
       df$x * xxx }
       ) 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-25
        • 1970-01-01
        • 2017-03-06
        相关资源
        最近更新 更多