R 创建一个函数来执行计算,并将答案作为列添加到现有数据框中

R 创建一个函数来执行计算,并将答案作为列添加到现有数据框中,r,R,我正在尝试解决如何创建一个用户定义的函数来对数据帧中的一系列列执行计算,并将答案作为附加列添加到同一数据帧中。为了简单起见,我使用的测试示例是计算从一年到下一年的百分比增长,但目标是能够创建更复杂的计算,这些计算过于繁琐和重复,无法手动计算 我一直使用的实践数据是 a <- c(10, 12) b <- c(11, 9) df <- t(data.frame(a, b)) df <- data.frame(df) colnames(

我正在尝试解决如何创建一个用户定义的函数来对数据帧中的一系列列执行计算,并将答案作为附加列添加到同一数据帧中。为了简单起见,我使用的测试示例是计算从一年到下一年的百分比增长,但目标是能够创建更复杂的计算,这些计算过于繁琐和重复,无法手动计算

我一直使用的实践数据是

    a <- c(10, 12)
    b <- c(11, 9)
    df <- t(data.frame(a, b))
    df <- data.frame(df)
    colnames(df) <- c(2001, 2002))
    df$PercGrowth <- (df$`2002` - df$`2001`) / df$`2001` * 100
我一直使用的手动计算是

    a <- c(10, 12)
    b <- c(11, 9)
    df <- t(data.frame(a, b))
    df <- data.frame(df)
    colnames(df) <- c(2001, 2002))
    df$PercGrowth <- (df$`2002` - df$`2001`) / df$`2001` * 100
如何将其转换为用户定义的函数,在该函数中可以指定要执行计算的列,然后将答案作为派生值添加到dataframe中

我最初认为可能有效的是

    pg <- function(data, c1, c2)
      df <- mutate(data, PercGrowth = ((df[c2] -df[c1]) / df[c1] * 100))

    pg(df, 1, 2)
但是,我不断收到错误消息:

错误:列PercGrowth属于不受支持的类data.frame


如何使其工作?

这实际上比看起来更复杂-您需要使用dplyr代词和准旋转,以便将列名作为参数传递到函数中。以下代码起作用:

library(dplyr)

a <- c(10, 12)
b <- c(11, 9)
df <- t(data.frame(a, b))
df <- data.frame(df)
colnames(df) <- c("year1", "year2")

pg <- function(df, col1, col2) {
  quo_col1 <- enquo(col1)
  quo_col2 <- enquo(col2)
  df %>% 
    mutate(pct_growth = (!! quo_col2 - !! quo_col1) / !! quo_col1 * 100)
}

pg(df, year1, year2)
我将列重命名为字符串,以便更易于使用。您可以通过此链接阅读更多内容:


另一种选择是对感兴趣的列名使用某种字符串匹配,使用这些列执行操作,然后将结果连接回主数据框。

列的名称将是数字?最初的使用基于每年的销售数字。