将函数应用于数据框中列的每一行以创建新列

时间:2020-05-16 04:51:40

标签: r dataframe lapply

我在将函数应用于数据框的列中的每一行以创建新列时遇到麻烦,希望能获得一些指导。函数的问题是一个maxplus运算符

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

我有一个像这样的数据框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'

我尝试应用,轻按,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)错误:参数必须具有相同的长度

我显然做错了(从根本上来说是错的),但是还不能解决我的问题。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

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