簡體   English   中英

在Dataframe中的所有元素上應用函數

[英]Apply a function on all elements in a Dataframe

我確信答案很簡單,但我在最后幾天做了很多搜索,但顯然無法找到正確的事情。問題是:我通過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'中的值,因此我可以將其發送回數據庫。

所以,如果有人有小費,請告訴我。

謝謝,

要在數據框的P1列上應用函數clvP1 ,只需:

 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)))

這是一個如何將特定函數應用於特定列的工作示例:

示例數據:

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 abfun對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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM