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

建筑师

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

我一直在使用的练习数据是...

    a <- c(10, 12)
    b <- c(11, 9)
    df <- t(data.frame(a, b))
    df <- data.frame(df)
    colnames(df) <- c(2001, 2002))

哪个看起来像...

      2001 2002
    a   10   12
    b   11    9

我一直在使用的手动计算是...

    df$PercGrowth <- (df$`2002` - df$`2001`) / df$`2001` * 100

返回:

      2001 2002 PercGrowth
    a   10   12   20.00000
    b   11    9  -18.18182

如何将其转换为用户定义的函数,我可以在其中指定要执行计算的列,然后将答案作为派生值添加到数据框中?

我最初认为可能有效的是......

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

    pg(df, 1, 2)

但是我不断收到错误消息:

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

我如何让这个工作?

红衣主教40

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

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)

我将列重命名为字符串,以便它们更易于使用。您可以在此链接中阅读更多内容:https : //dplyr.tidyverse.org/articles/programming.html

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

创建一个函数以遍历现有数据框并将值添加到新列

如何根据另一列计算唯一项目的数量并将其添加到现有数据框中

熊猫:根据现有数据,将一列添加到数据框,作为链接操作

Pyspark-生成一个日期列,其中包含两个给定日期之间的所有日期,并将其添加到现有数据框中

将列表的列表作为列添加到python中的现有数据框

使用Apply将2个新列添加到现有数据框

将多个数据框添加到一个数据框,而不会覆盖R中的现有数据框

如何一次将多个列添加到现有数据框中?

将一列DateTime添加到现有数据框

将一列数据框添加到R中的现有数据框列中?

将反应对象中的值添加到现有数据框中作为列

在Pyspark中,如何将值列表作为新列添加到现有数据框?

根据现有数据框中的其他列创建一个新列

将数据框添加到特定行和列的现有数据框

从一个函数计算多列并将其添加到data.frame

将groupby添加到现有数据框

尝试定义一个将元素添加到现有数组顶部的函数

需要使用列将新的DateTime列添加到现有数据框

pandas:如何创建一个包含两列的字典并将它们添加到现有的字典列中?

Pandastable将新列添加到现有数据框

lapply 将列添加到现有数据框

如何将用户输入中的列添加到现有数据框中?

如何将从方法获得的结果列添加到现有数据框?

将纬度和经度列添加到现有数据框中

将一组标题添加到现有数据框

如何计算小计并将其添加到同一个数据框中?

根据现有数据框的条件创建一个新的数据框

python可以从现有数据框创建一个新的数据框吗?

VBA:传递一个参数来表示要添加到组合框的列数