我是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,而没有两个连续的零。 - Daniel Fischer