我确信答案很简单,但我在最后几天做了很多搜索,但显然无法找到正确的事情。问题是:我通过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'中的值,因此我可以将其发送回数据库。
所以如果有人有小费,请告诉我。
谢谢,
答案 0 :(得分: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)))
答案 1 :(得分: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
应用于col a
,将bfun
应用于col b
,依此类推......
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