Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R lappy和if在data.table中_R_Data.table_Finance_Quantitative Finance - Fatal编程技术网

R lappy和if在data.table中

R lappy和if在data.table中,r,data.table,finance,quantitative-finance,R,Data.table,Finance,Quantitative Finance,我想在data.table中检查以下内容: 我们删除Rt或Rt-1大于300%和(1+Rt)(1+Rt-1)-1小于50%的回报 现在我有了一个data.table,其中有很多返回列,每个列代表一个公司,行是特定于日期的,返回是 在Data.table ReturnsDS01中,它们也缺少值(NA) 我试图通过以下代码应用此功能: ReturnsNEW <- ReturnsDS01[,lapply(.SD, function(x) ifelse((x > 3 || shift(x,

我想在data.table中检查以下内容:

我们删除Rt或Rt-1大于300%和(1+Rt)(1+Rt-1)-1小于50%的回报

现在我有了一个data.table,其中有很多返回列,每个列代表一个公司,行是特定于日期的,返回是 在Data.table ReturnsDS01中,它们也缺少值(NA)

我试图通过以下代码应用此功能:

ReturnsNEW <- ReturnsDS01[,lapply(.SD, function(x) ifelse((x > 3 || shift(x, fill = NA) > 3) && ((1+x)(1+shift(x, fill = NA))-1)) < 0.5, x = NA, x=x), .SDcols = names(ReturnsDS01)[sapply(ReturnsDS01, is.numeric)]]
第二个问题:如果x和shift(x)都满足这些条件,我想将它们分配给NA,但我不知道c(x,shift(x))=NA如何工作

谁能帮我一点忙吗


提前感谢。

第一期

存在许多语法问题,例如:

  • 比较向量时应使用“|”和“&”作为“||”或“&&”的对立面
  • 不需要使用“x=NA”或“x=x”,只需对ifelse使用“NA,x)”
  • 乘以2 brucket,中间需要一个“*”
  • 布鲁克斯不匹配
因此,适用于我的代码如下:

ReturnsDS01 = data.table(a = runif(10,0,1),b = runif(10,0,1))
numericVar = names(ReturnsDS01)[sapply(ReturnsDS01, is.numeric)]
lagNew  <- function(x) ifelse((x > 3 | shift(x) > 3) & (1+x)*(1+shift(x))-1 < 0.5, NA, x)
ReturnsNEW <- ReturnsDS01[,lapply(.SD, lagNew), .SDcols = numericVar]
ReturnsDS01=data.table(a=runif(10,0,1),b=runif(10,0,1))
numericVar=names(ReturnsDS01)[sapply(ReturnsDS01,is.numeric)]
LAG新3 |移位(x)>3)和(1+x)*(1+shift(x))-1<0.5,NA,x)
返回值新3)和(1+x)*(1+shift(x))-1<0.5)
x[ind]=NA
x[setdiff(ind-1,0)]=NA
x
}

ReturnsNEW首先:非常感谢你花时间帮助我,我从你的帖子中学到了很多。这非常有效,为了更好地理解您的代码并能够将其应用于其他场景,我还有一个问题:为什么即使我的表中有NA值,您的新函数仍能工作?我认为在这些情况下,我需要在移位函数中使用fill=NA。提前谢谢,我现在明白了。抱歉打扰您,再次感谢:)
ReturnsDS01 = data.table(a = runif(10,0,1),b = runif(10,0,1))
numericVar = names(ReturnsDS01)[sapply(ReturnsDS01, is.numeric)]
lagNew  <- function(x) ifelse((x > 3 | shift(x) > 3) & (1+x)*(1+shift(x))-1 < 0.5, NA, x)
ReturnsNEW <- ReturnsDS01[,lapply(.SD, lagNew), .SDcols = numericVar]
ReturnsDS01 = data.table(a = runif(10,0,1),b = runif(10,0,1))
ReturnsDS01$a[3] = 4
ReturnsDS01$a[2] = -0.9
lagNew  <- function(x) {
  ind = which((x > 3 | shift(x) > 3) & (1+x)*(1+shift(x))-1 < 0.5)
  x[ind] = NA
  x[setdiff(ind-1,0)] = NA
  x
}

ReturnsNEW <- ReturnsDS01[,lapply(.SD, lagNew), .SDcols = numericVar]