【问题标题】:applying formula in R to multiple rows [duplicate]将R中的公式应用于多行[重复]
【发布时间】:2018-03-31 08:08:49
【问题描述】:

我有一个数据框可以说

a   b
1   10
2   13

我有另一个数据框,其中我有 1 个值“c”,等于 0.3 我想使用以下公式在第一个数据框中创建列“d”

1st row will be 1*10*.3
2nd row will be 2*13*.3

请注意 .3 很常见。

请为此建议一个 R 函数。

【问题讨论】:

  • 这不就是df1$a * df1$b * 0.3吗?

标签: r dataframe


【解决方案1】:

如果您想按行将函数应用于数据框或矩阵,请使用applyMARGIN 参数为 1。这里您想要的函数是 prod,或者因为您只有两个列,您可以使用*apply 调用逐行获取产品,为您提供长度 == nrow(df) 的向量。您将该向量直接乘以0.3,得到值,然后将其分配给带有df$c<- 的新列

df$c <- apply(df, 1, prod)*0.3
df
   a  b    c
1  1  2  0.6
2 10 13 39.0

数据:

df <- data.frame(a = c(1, 10), b = c(2, 13))
df
   a  b
1  1  2
2 10 13

【讨论】:

    【解决方案2】:

    使用 dplyr 并假设 df2 将仅包含 1 列名为 c 的列,其中 1 行的值 = 0.3

    require(dplyr)
    
    df1 <- data.frame(a = c(1, 2), b = c(10, 13))
    df2 <- data.frame(c = 0.3)
    
    df1 %>%
      mutate(d = a * b * df2$c)
    

    【讨论】:

      【解决方案3】:

      另一个选项是Reduce*

      df$c <- Reduce(`*`, df) * 0.3
      df$c
      #[1]  0.6 39.0
      

      或者我们可以使用matrixStats中的rowProds

      library(matrixStats)
      df$c <- 0.3 * rowProds(as.matrix(df))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-15
        • 2013-11-23
        • 1970-01-01
        • 2021-12-13
        相关资源
        最近更新 更多