r - 如果一列中至少有两个零,我如何用 NA 替换所有零?
问题描述
我从 Datastream 获得每日价格/退货数据。由于如果股票死了,Datastream 不会结束一个系列,它会显示最后一个有效价格,直到我的时间跨度结束。我想用 NA 替换所有这些零回报。但是通过这样做,我可能会更改一些有效的零回报。因此,只有在彼此之后有两个(或 4 个,必须指定)零时,我才想用 NA 替换零。因为我是新手,所以我不熟悉 if 条件/循环。
这是我的第一次尝试:
Return.Monthly[Return.Monthly==0]<-NA
但正如我所说,有一些有效的退货可能会被删除。
所以我想要:
Return.Monthly[Return.Monthly==0]<-NA if (Return.Monthly[i+1,] ==0)
当然,这也必须适用于最后一行。(在最好的情况下)
非常感谢您的帮助 !
编辑:
所以现在我得到了这个:
回报:
AAPL AMZ YHOO
0.2 0.3 0
0 0 0.4
0 0.3 0.6
0 0.2 0.5
我想要这个:
回报:
AAPL AMZ YHOO
0.2 0.3 0
NA 0 0.4
NA 0.3 0.6
NA 0.2 5
解决方案
假设第一期所有公司都存在,最后一期没有公司消失:
ret <- rbind(c(0.2, 0.3, 0),
c(0, 0, 0.4),
c(0, 0.3, 0.6),
c(0, 0.2, 0.5))
retU <- rbind(ret[-1,], 0L) # shifts the matrix up one row to
# compare with the next period
both <- (ret == 0) & (retU == 0)
retcpy = ret
retcpy[cbind(row(ret)[both], col(ret)[both])] <- NA
> ret
[,1] [,2] [,3]
[1,] 0.2 0.3 0.0
[2,] 0.0 0.0 0.4
[3,] 0.0 0.3 0.6
[4,] 0.0 0.2 0.5
> retcpy
[,1] [,2] [,3]
[1,] 0.2 0.3 0.0
[2,] NA 0.0 0.4
[3,] NA 0.3 0.6
[4,] NA 0.2 0.5
推荐阅读
- sql - 消息 537,级别 16,状态 2,第 6 行 传递给 LEFT 或 SUBSTRING 函数的长度参数无效
- spring - 使用 Spring Boot 包装一个整体 JSF/Spring 应用程序
- python - 使用 PyPDF2 合并超过 2 个 PDF
- android - 如何使用列表数据从linkedSetOf返回MutableSet?
- css - 如何确保列不会增加超过宽度百分比
- bokeh - 散景图中显示的默认字体是什么?
- python - 在 Google Build 期间在 app.yaml 文件中添加环境变量
- c# - 输入不是有效的 Base-64 字符串,因为它包含非 base 64 字符,即填充字符中的非法字符
- javascript - 使用 HTML 按钮更改 Javascript 变量
- windows - boot2docker v18.06 后无法使用 Windows 10 中的共享文件夹来 boot2docker VM