簡體   English   中英

將 function 應用於 dataframe 中的列的每一行以創建新列

[英]Apply a function to each row of a column in a dataframe to create a new column

我在將 function 應用於 dataframe 的列中的每一行以創建新列時遇到問題,希望得到一些指導。 function 是一個 maxplus 運算符的問題

maxplus  <- function(x, lb=0){max(x, lb)}

我有一個 dataframe r_df ,它看起來像這樣:

head(r_df)

      Date    GS3M_ret
1 Jan 1990 0.006583333
2 Feb 1990 0.006666667
3 Mar 1990 0.006808333
4 Apr 1990 0.006700000
5 May 1990 0.006675000
6 Jun 1990 0.006658333

我想將maxplus應用於最后一列以獲得 GS3M_ret 的正限制。 使用運算符直接給我一個數字,這不是我想要的(我希望每一行測試都是 GS3M_ret 和 0 對應行的最大值)

maxplus(r_df[, "GS3M_ret"], 0)

        Date     GS3M_ret        test
1   Jan 1990 6.583333e-03 0.006808333
2   Feb 1990 6.666667e-03 0.006808333
3   Mar 1990 6.808333e-03 0.006808333
4   Apr 1990 6.700000e-03 0.006808333
5   May 1990 6.675000e-03 0.006808333'

我已經嘗試過應用、tapply、sapply 等,並得到以下的變體

apply(r_df[, "GS3M_ret"], 1, maxplus)

apply(r_df[, "GS3M_ret"], 1, maxplus 出錯:dim(X) 必須有正長度

要么

tapply(r_df[, "GS3M_ret"], 1, maxplus)

tapply 中的錯誤(r_df[,“GS3M_ret”],1,maxplus):arguments 必須具有相同的長度

我顯然做錯了(並且是基本錯誤),但無法解決我的問題。 任何幫助將不勝感激。

max返回單個數字。 要分別測試每個數字,請使用pmax

maxplus  <- function(x, lb=0) pmax(x, lb)

maxplus(df$GS3M_ret)
#Or specify lb
#maxplus(df$GS3M_ret, 0)
#[1] 0.006583333 0.006666667 0.006808333 0.006700000 0.006675000 0.006658333

暫無
暫無

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

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