r - 如何为我的整个表集向前滚动最大值?
问题描述
所以我有一个名为 aaa 的数据集,如下所示:
Date 100.sh 101.sh 102.sh 100.sz 101.sz 102.sz ... xxx.xx
2009 Q1 1 1 0 0 0 NA ...
2009 Q2 0 0 1 0 0 NA ...
2009 Q3 0 0 1 NA 0 NA ...
2009 Q4 0 0 0 1 0 NA ...
2010 Q1 1 0 1 0 0 NA ...
2010 Q2. 0 0 0 0 0 1 ...
...
2020 Q3 0 0 0 1 0 0 ...
我的目标是更改此表,看看在接下来的四个季度中,当前季度是否有任何 1 或 0 或 NA。所以基本上我试图找到接下来四个季度(不包括当前季度)的滚动最大值,所以如果例如在接下来的四个季度(2009 Q2-2010 Q2)的 2009 Q1 的 100.sh 有任何 1那么它将是 1,如果接下来的四个季度只有 0,那么它将为零,如果接下来的四个季度都是 NA,那么 NA。这就是我使用 rollmax 的原因,因为无论如何最大值都是 1。
以下是我尝试过的一些方法:
aaaa<-rollmax(aaa[-1], 4, align="left", na.rm-TRUE, partial=TRUE, fill=0)
但它给了我错误:与请求的类型不兼容:[type=list:target=double]
所以我尝试了:
aaaa<-rollmax(aaa[-1], 4, align="left", na.rm=TRUE, partial=TRUE, fill=0)
但这给了我 match.arg(align) 中的错误:'arg' 应该是“正确”之一
aaaa<-rollapplyr(aaa[-1],4,max, align="left", na.rm=TRUE, partial=TRUE, fill=0)
但是,这只是删除了日期并给了我一串数字。
我也试过:
aaaa<-rollmaxr(aaa, 4,align="left", na.rm=TRUE, partial=TRUE, fill=0)
这也给了我一个带有日期的 num 字符串。
然后我尝试了:
aaa[roll_max(aaa,4)]
但这也给了我错误:与请求的类型不兼容:[type=list:target=double]
我想保持日期相同,而不是在日期上滚动,同时将其保留为 data.frame,因此结果如下所示:
Date 100.sh 101.sh 102.sh 100.sz 101.sz 102.sz ... xxx.xx
2009 Q1 1 0 1 1 0 NA ...
2009 Q2 1 0 1 1 0 1 ...
2009 Q3 1 0 1 1 0 1 ...
2009 Q4 1 0 1 0 0 1 ...
2010 Q1 0 0 1 0 0 1 ...
2010 Q2 depends on next four quarter ...
...
2020 Q3 0 0 0 0 0 0 ...
(在上面的表格中,2009 年第二季度及以后的一些 0 和 1 确实取决于接下来四个季度的列表,如果我只是假设有 1,但这是我希望表格看起来像什么的粗略想法,抱歉! )
有没有办法保持日期相同并找到未来四个季度的向前滚动最大值,如果有任何 1 然后 1,case_when ~1 ~0 ~NA
或者使用if
&any
会是更好的方法吗?
感谢你的帮助!
解决方案
我可以建议一种不同的方法。您的数据是二进制的(1 和 0)。因此,您可以利用用于逻辑运算(TRUE 和 FALSE)的函数。一个真正有用的函数是any()。如果一组数字中1
有任何数字,则返回。1
它应该比 rollmax 更快、更简单。
有了它,您可以构建一个适用于单列的函数:
rollany <- function(x) {
nx <- length(x)
result <- numeric(length=nx)
for(i in 1:(nx-5)) { result[i] <- any(x[(i+1):(i+5)]) }
return(result)
}
接下来,您可以使用 apply 为每一列运行该函数
apply(aaa,2,rollany)
推荐阅读
- javascript - 防止jQuery在ajax调用后加载图像
- c# - 您如何将时间四舍五入到最接近的时间,但又如何在 NodaTime 调整器中更改日期?
- dart - 如何使 SingleChildScrollView 从底部开始?
- java - How can I check if a bean has been loaded by springboot
- sql - 显示 itemname 、 type 和实际价格,其中实际价格是所有记录的价格折扣
- wavesplatform - 关于@waves/waves-transactions 库
- css - less-loader 模块构建失败 ~ import
- c++ - int main() 和带符号的 main() 之间的区别
- visual-studio - Ankh SVN 更新到最新版本后未在 Visual Studio 中的解决方案中添加新文件
- python-3.x - 使用 bs4 从