1

我相信答案很简单,但我最近几天做了很多搜索,但显然无法找出正确的做法。问题是:我通过 RODBC 导入了一个数据集,显示了多少利润每个用户都在生成

userdata <- sqlQuery(channel, query) 
userdata    

  USER   P1  P2   P2   P3
1 322    459 354  349  699 
2 232    249 311  349  699 
3 433    390 393  349  699 

然后我制作了 4 个函数,它们有自己的一组条件,它们将简单地返回一个数字,即客户生命周期价值。我喜欢在每列 P1、P2、P2、P4 上使用函数。例如,对列 P1 中的每个元素应用 clvP1() 等等。最终结果开始更新'userdata'中的值,因此我可以将其发送回数据库。

所以如果有人有小费,请告诉我。

谢谢,

4

2 回答 2

2

要在数据框的 clvP1列上简单地应用函数:P1

 userdata$P1 = clvP1(userdata[,'P1'])

完整的解决方案:

 new_userdata = with(userdata, data.frame(USER=USER, P1=clvP1(P1), P2=clvP2(P2),
                                          P3=clvP3(P3), P4=clvP4(P4)))
于 2013-06-05T01:54:58.257 回答
1

这是一个工作示例,说明如何将特定功能应用于特定列:

示例数据:

test <- data.frame(a=1:3,b=4:6)
test

  a b
1 1 4
2 2 5
3 3 6

将函数定义为columnname+"fun"

afun <- function(x) {exp(x)}
bfun <- function(x) {log(x)}

适用afun于 colabfunto colb等等...

data.frame(
  mapply(
    function(x,y) do.call(y,list(x)),
    test, 
    paste(names(test),"fun",sep=""),
    SIMPLIFY=FALSE
        )
)

结果

#     exp(a)   log(b)    as defined by afun and bfun
          a        b
1  2.718282 1.386294
2  7.389056 1.609438
3 20.085537 1.791759
于 2013-06-05T01:46:44.800 回答