我正在尝试创建一个可重用的函数来计算转换,该转换将应用于数据框并根据其他变量的一些条件返回值(或 NA)。这是我第一次尝试在函数中创建多条件计算。
它将首先查看一个名为 parentID 的变量,它是一个分类变量。只有值 377 的计算方式不同。然后它将查看两个 vars 线索的值并单击以检查它们的值是否大于 1。如果不是,它将返回 NA。然后它将决定潜在客户或销售额是否更大,并根据哪个更大进行计算。
计算很简单:x$sales / x$clicks 或 x$leads / x$clicks
set_cr <- function(x) {
if (x$parentID==377) {
if (x$leads < 1 | x$clicks < 1) {
return(NA)
}
else {
if (x$leads > x$sales) {
cr <- x$leads / x$clicks
return(cr)
}
else {
cr <- x$sales / x$clicks
return(cr)
}
}
}
else {
if (x$parentID != 377) {
if (x$sales < 1 | x$clicks < 1) {
return(NA)
}
else {
cr <- x$sales / x$clicks
return(cr)
}
}
}
return(NA)
}
然后我将其应用于数据框,使用:
apply(df, 1, set_cr)
我本以为会看到控制台中打印的值,但这会引发许多错误,并且在搜索和检查多个资源后,我无法调试。从这里我会用它在数据框中创建 ax$cr var。
此问题的样本数据集:
structure(list(parentID = c(377, 377, 311, 322, 333), clicks = c(9078,
78404, 398443, 16142, 111715), sales = c(69, 95, 7191, 146, 33966
), leads = c(500, 0, 500, 0, 33966)), .Names = c("parentID", "clicks",
"sales", "leads"), row.names = c(NA, 5L), class = "data.frame")
parentID clicks sales leads
377 9078 69 500
377 78404 95 0
311 398443 7191 500
322 16142 146 0
333 111715 33966 33966
如果有更好的方法来分享这个数据示例,请告诉我,我可以编辑它。我记得一个包,但无法在 rseek 或可重用数据集的 crantastic 中找到它。
提前致谢。