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