我在将函数应用于数据框的列中的每一行以创建新列时遇到麻烦,希望能获得一些指导。函数的问题是一个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)错误:参数必须具有相同的长度
我显然做错了(从根本上来说是错的),但是还不能解决我的问题。任何帮助将不胜感激。
答案 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