【问题标题】:Apply custom function to two columns for every row in data frame in R将自定义函数应用于 R 中数据框中每一行的两列
【发布时间】:2016-04-13 10:26:04
【问题描述】:

我有一个 data.frame DF 看起来有点像这样

category var1 var2 
apples    1    4
bananas   3    3
orange    4    1 
kiwis     2    3

我还创建了一个简单的自定义函数,它根据两个参数生成输出:

annualize_fte <- function(tenure, amount)
{
    if (tenure==0) return(0)

    if (tenure>12) {
        result = amount
    } else {
        t_factor = 12 / tenure
        result = amount * t_factor
    }
    return(result)
}

我想创建第三列 var3,它是将annualize_fte(var1, var2) 应用于每一行的结果。

我尝试了以下方法并失败了:

mutate(DF, var3=annualize_fte(var1, var2)) 
apply(DF, 1, annualize_fte, DF$var1, DF$var2)

我在未使用的参数或条件长度 >1 的错误周围遇到错误。

【问题讨论】:

  • ifelse(x==0, 0, ifelse(x&gt;12, x, y*12/x))

标签: r dataframe dplyr


【解决方案1】:

也许您想尝试使用Vectorize() 来制作它,以便您的函数可以使用和返回向量:

annualize_fte_v <- Vectorize(annualize_fte)

(DF$var3 <- annualize_fte_v(DF$var1,DF$var2))
#   category var1 var2 var3
# 1   apples    1    4   48
# 2  bananas    3    3   12
# 3   orange    4    1    3
# 4    kiwis    2    3   18

【讨论】:

  • 这正是我所需要的!这是一个非常简洁的功能,谢谢。
  • 换一种说法:多变量函数应用通常由Mapmapply处理。在这里,我们将使用 mapply(annualize_fte, tenure = DF$var1, amount = DF$var2) 来获取值。 Vectorize 在这里创建了 annualize_fte 的修改版本,构建在 mapply 之上。
猜你喜欢
  • 2015-12-05
  • 2021-08-03
  • 2023-03-17
  • 1970-01-01
  • 2013-06-28
  • 1970-01-01
  • 2023-03-02
  • 2020-10-28
  • 1970-01-01
相关资源
最近更新 更多