【发布时间】:2018-08-14 14:38:19
【问题描述】:
我是 R 新手,并且一直在努力解决以下问题,所以我希望有人能够帮助我。
样本数据代表股票价格回报(每行是一个月)。真实数据集要大得多,其结构类似于以下输入:
输入:
stock1 <- c(0.01, -0.02, 0.01, 0.05, 0.04, -0.02)
stock2 <- c(0, 0, 0.02, 0.04, -0.03, 0.02)
stock3 <- c(0, 0, 0.02, 0, -0.01, 0.03)
stock4 <- c(0, -0.02, 0.01, 0, 0, -0.02)
df <- cbind(stock1,stock2,stock3,stock4)
stock1 stock2 stock3 stock4
[1,] 0.01 0.00 0.00 0.00
[2,] -0.02 0.00 0.00 -0.02
[3,] 0.01 0.02 0.02 0.01
[4,] 0.05 0.04 0.00 0.00
[5,] 0.04 -0.03 -0.01 0.00
[6,] -0.02 0.02 0.03 -0.02
对于给定股票,在非零之前的任何零都表示缺失数据,而不是该期间的零回报。我想将这些值设置为 NA 所以我想实现的输出如下:
期望的输出:
stock1 <- c(0.01, -0.02, 0.01, 0.05, 0.04, -0.02)
stock2 <- c(NA, NA, 0.02, 0.04, -0.03, 0.02)
stock3 <- c(NA, NA, 0.02, 0, -0.01, 0.03)
stock4 <- c(NA, -0.02, 0.01, 0, 0, -0.02)
df <- cbind(stock1,stock2,stock3,stock4)
stock1 stock2 stock3 stock4
[1,] 0.01 NA NA NA
[2,] -0.02 NA NA -0.02
[3,] 0.01 0.02 0.02 0.01
[4,] 0.05 0.04 0.00 0.00
[5,] 0.04 -0.03 -0.01 0.00
[6,] -0.02 0.02 0.03 -0.02
我尝试了一些方法,但它们似乎只适用于单个向量,而不是具有多列的数据集。我试过使用 lapply 来解决这个问题,但到目前为止还没有任何运气。我得到的最接近的如下所示。
我的单向量解决方案:
stock1[1:min(which(stock1!=0))-1 <- NA
我的多向量解决方案不起作用:
lapply(df,function(x) x[1:min(which(x!=0))-1 <- NA]
非常感谢任何指导!谢谢!
【问题讨论】:
-
只有第一个前导零应该被改变吗?这意味着,例如,如果
stock1 <- c(0.01, -0.02, 0.01, 0, 0, -0.02)你也想把它们保持为 0,虽然有两个连续的零?在您的示例中,您在其他地方只有一个 0,但没有两个连续的。
标签: r