gpt4 book ai didi

r - 使用所有因素(包括缺失因素)合并拆分的 xts 列表

转载 作者:行者123 更新时间:2023-12-02 01:19:22 25 4
gpt4 key购买 nike

如何快速有效地拆分和合并 xts对象 x使用比 x 引用的因素更大的因素列表?

这个简单的例子没有产生完整的因素列表(用零填充)。

a = cbind(value = runif(2), group = c(1,3))
x = xts(a, Sys.Date() + 1:nrow(a))
do.call(merge, c(split(x$value, x$group), fill = 0))

value.1 value.3
2016-12-08 0.3403723 0.0000000
2016-12-09 0.0000000 0.5247683

我的解决方法是附加与所有组关联的虚拟值,然后拆分和合并,然后删除虚拟值,如

all.groups = 1:5
x.all.groups = xts(cbind(value = 0, f = all.groups), Sys.Date()-1:length(all.groups))
x = rbind(x,x.all.groups)
as.xts(do.call(merge, c(split(x$value, x$group), fill = 0)))[!(index(x) %in% index(x.all.groups)),]

value.1 value.2 value.3 value.4 value.5
2016-12-08 0.3455855 0 0.00000 0 0
2016-12-09 0.0000000 0 0.16545 0 0

另一种解决方法是在操作之间附加缺失组列表 splitmerge .

但是,这些解决方案似乎过于笨重。有什么建议么?有没有更好的方法来利用 split (或其他一些功能)及其参数?

最佳答案

这是一个 tidyverse 解决方案。请注意,xts 对象是引擎盖下的矩阵,因此它们都是相同的类型。因此,首先转换为 data.frame 并为因子分配特定级别,然后在该因子上展开

x %>% as.data.frame %>% 
mutate(date = row.names(.),
group = factor(.$group, levels = 1:5)) %>%
spread(group, value, fill = 0, drop = FALSE)


date 1 2 3 4 5
1 2016-12-08 0.2238529 0 0.0000000 0 0
2 2016-12-09 0.0000000 0 0.6423199 0 0

关于r - 使用所有因素(包括缺失因素)合并拆分的 xts 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41011280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com