【发布时间】:2016-02-01 02:18:12
【问题描述】:
我有一个数据框,其中有一列值 (CVT_revenue$V4) 范围从 1 到 100。我想对列中的每个值应用一个函数,并使用函数的输出创建一个新列。例如,如果 CVT_revenue$V4 的第一行有 45,我希望函数在第一个 else if 语句中执行计算,然后将输出放入新列的第一行。
这是我尝试过的:
actualRevenues <- function(df, column){
for (i in 1:nrow(df)){
if (column[i] < 33){
df$actualRevenue <- (column[i] * 22000 + 300000)
} else if(column[i] > 32 & column[i] < 67){
df$actualRevenue <- ((column[i] - 32) * 33000000 + 1000000)
} else {
df$actualRevenue <- ((column[i] - 66) * 9090909 + 100000000)
}
}
}
actualRevenues(CVT_revenue, CVT_revenue$V4)
自从开始处理这个问题以来,我了解到 mapply 可能是完成我想做的事情的最简单方法,但我不确定我的代码为什么不起作用。如果我在 else 语句之后放置一个 print 语句,我可以看到它一遍又一遍地计算相同的值。这是打印结果中的一个 sn-p:
[1] 5.95e+08 5.95e+08 5.95e+08 5.95e+08 5.95e+08 5.95e+08 5.95e+08 5.95e+08 5.95e+08
[10] 5.95e+08 5.95e+08 5.95e+08 5.95e+08 5.95e+08 5.95e+08 5.95e+08 5.95e+08 5.95e+08
[19] 5.95e+08 5.95e+08 5.95e+08 5.95e+08 5.95e+08 5.95e+08 5.95e+08 5.95e+08 5.95e+08
[28] 5.95e+08 5.95e+08 5.95e+08 5.95e+08 5.95e+08 5.95e+08 5.95e+08 5.95e+08 5.95e+08
感谢您的帮助。
【问题讨论】:
标签: r function if-statement