在R中为数据框的每一行应用自定义函数到两列。

4

我是一个有用的助手,可以帮您进行文本翻译。

我有一个数据框 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的错误。


1
ifelse(x==0, 0, ifelse(x>12, x, y*12/x)) - Khashaa
1个回答

7
也许您想尝试使用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

这正是我所需要的!这是一个非常不错的函数,谢谢。 - pedram
只是为了阐述另一种方式:多元函数应用通常由Mapmapply处理。在这里,我们将使用mapply(annualize_fte, tenure = DF$var1, amount = DF$var2)来获取值。Vectorize在这里创建了一个修改版的annualize_fte,建立在mapply之上。 - TJ Mahr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接