Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >连接/合并时间序列(在R中)

连接/合并时间序列(在R中)
EN

Stack Overflow用户
提问于 2013-03-17 09:19:25
回答 4查看 13.5K关注 0票数 7

我必须xts/zoo对象。每种方法在不同的时间跨度内都有不同变量的度量。我想创建一个单一的时间序列,包含所有时间的所有度量,并使用NAs来查找缺少的日期/变量组合。我该怎么做?人工示例:

代码语言:javascript
代码运行次数:0
复制
library(xts)
x<-cbind(a=1:3,b=3:1)
rownames(x) = as.character(Sys.Date()-1:3)

y<-cbind(a=5:7,c=3:1)
rownames(y) = as.character(Sys.Date()-5:7)

xs=as.xts(x)
ys=as.xts(y)

#now what?

#desired outcome looks like:
            a  b   c
2013-03-10  7 NA   1
2013-03-11  6 NA   2
2013-03-12  5 NA   3
2013-03-14  3  1  NA
2013-03-15  2  2  NA
2013-03-16  1  3  NA

# regular merge looks like that (adding an a.1 variable)
merge(xs,ys)
            a  b a.1  c
2013-03-10 NA NA   7  1
2013-03-11 NA NA   6  2
2013-03-12 NA NA   5  3
2013-03-14  3  1  NA NA
2013-03-15  2  2  NA NA
2013-03-16  1  3  NA NA

# simple concatenation ignores variable names and looks like that
c(xs,ys)
           a b
2013-03-10 7 1
2013-03-11 6 2
2013-03-12 5 3
2013-03-14 3 1
2013-03-15 2 2
2013-03-16 1 3

# so what should I do?
EN

回答 4

Stack Overflow用户

发布于 2013-03-17 09:52:06

这不是一个通用的解决方案。但适用于此示例:

代码语言:javascript
代码运行次数:0
复制
cbind(rbind(xs[,1],ys[,1]), cbind(xs[,-1],ys[,-1]))
           a  b  c
2013-03-10 7 NA  1
2013-03-11 6 NA  2
2013-03-12 5 NA  3
2013-03-14 3  1 NA
2013-03-15 2  2 NA
2013-03-16 1  3 NA

只需提醒一下,cbind.xts就是merge.xts。S您可以使用merge获得相同的结果

代码语言:javascript
代码运行次数:0
复制
merge(rbind(xs[,1],ys[,1]), merge(xs[,-1],ys[,-1]))
           a  b  c
2013-03-10 7 NA  1
2013-03-11 6 NA  2
2013-03-12 5 NA  3
2013-03-14 3  1 NA
2013-03-15 2  2 NA
2013-03-16 1  3 NA

这个解决方案的问题是,如果ysxs有一些相同的日期,那么在最后的xts object.For示例中,如果我们替换y:

代码语言:javascript
代码运行次数:0
复制
rownames(y) = as.character(Sys.Date()-3:5)

您得到的是2013-03-14的重复索引,所以我不确定它是否是一个有效的xts对象。

代码语言:javascript
代码运行次数:0
复制
merge(rbind(xs[,1],ys[,1]), merge(xs[,-1],ys[,-1]))
           a  b  c
2013-03-12 7 NA  1
2013-03-13 6 NA  2
2013-03-14 3  1  3
2013-03-14 5 NA NA
2013-03-15 2  2 NA
2013-03-16 1  3 NA

EDIT是解决方案的概括:

代码语言:javascript
代码运行次数:0
复制
inter <- intersect(names(ys), names(xs))
diffx <- setdiff(names(xs),inter)
diffy <- setdiff(names(ys),inter)

merge(rbind(xs[,inter],ys[,inter]), merge(xs[,diffx],ys[,diffy]))


           a  b  c
2013-03-10 7 NA  1
2013-03-11 6 NA  2
2013-03-12 5 NA  3
2013-03-14 3  1 NA
2013-03-15 2  2 NA
2013-03-16 1  3 NA
票数 4
EN

Stack Overflow用户

发布于 2013-03-17 10:08:16

What you want => merge(data.frame(x,d),data.frame(y,d),by=c("d","a"),all=T)

你应该使用data.frame而不是名称向量/矩阵,这是一个通用的解决方案,你想要的只是一个带有完整外连接的一行(看看?merge)

代码语言:javascript
代码运行次数:0
复制
x<-cbind(a=1:3,b=3:1)
d= as.character(Sys.Date()-1:3)
DT1 = data.frame(x,d)
#DT1
#   a b          d
#1: 1 3 2013-03-16
#2: 2 2 2013-03-15
#3: 3 1 2013-03-14

y<-cbind(a=5:7,c=3:1)
d = as.character(Sys.Date()-5:7)
DT2 = data.frame(y,d)
#DT2
#   a b          d
#1: 1 3 2013-03-12
#2: 2 2 2013-03-11
#3: 3 1 2013-03-10
merge(DT1,DT2,by=c("d","a"),all=T)
#           d a  b  c
#1 2013-03-10 7 NA  1
#2 2013-03-11 6 NA  2
#3 2013-03-12 5 NA  3
#4 2013-03-14 3  1 NA
#5 2013-03-15 2  2 NA
#6 2013-03-16 1  3 NA
票数 2
EN

Stack Overflow用户

发布于 2013-03-17 13:05:08

好的。我花了一些时间思考这个问题。因为最终我需要将许多这样的数据帧/xts“合并”成一个,而不仅仅是合并其中的两个,我认为在一个步骤中完成所有这一切是有意义的:创建一个包含所有日期/变量组合的大矩阵。然后将所有观察到的数据逐个插入到这个大矩阵中。代码看起来像这样(我很乐意得到关于它的评论,并且可以随意使用,当然没有任何形式的保证):

代码语言:javascript
代码运行次数:0
复制
alltogether = function(dlist) {
    all.vars = unique(unlist(lapply(dlist,colnames)))
    all.obs = unique(unlist(lapply(dlist,rownames)))    
    res = array(NA,dim=c(length(all.obs),length(all.vars)),
          dimnames=list(all.obs,all.vars))
    for(d in dlist) {
            res[rownames(d),colnames(d)]=d
    }
    return(res)
}

alltogether.xts = function(xlist) {
    dlist = lapply(xlist,as.matrix)
    res = alltogether(dlist)
    xres = as.xts(res)
    return(xres)
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15459205

复制
相关文章
jq精简显示(隐藏)文本
全栈若城
2024/02/29
960
jq精简显示(隐藏)文本
精简Python项目的Dockerfile
之前生成的镜像很大,1个G。因为公司的需求是要将所有的代码,配置文件都放到Docker中,并且程序只保留编译过后的pyc文件。也就是说,给客户的是一个Docker镜像 而且Docker镜像是禁止客户访问的,数据库配置信息咋办?这些全部写在了.env的配置文件里,也方便客户去修改操作,然后用docker-compose中的env-file指定一下文件就ok了,但是就算这样,将项目一股脑的塞到一起,不大才怪咧。经过两天的研究,最终将项目精简到了380MB。应该是可以在减少 但是先这样。。记录一下吧 ---- 从
简单、
2018/07/17
1.4K0
Python 代码精简和优化
Python很简单,容易使用,开发效率很高,移植性很好,代码资源也很丰富,被广泛使用。但是Python代码编出来的动态库比较大,python库很全,缺点就是库比较大。
py3study
2020/01/06
1.5K0
Python精简代码实现循环左移循环右移
循环左移原理 拿一个32位的数(4个字节)来说 进行移动八位 如: 0x12345678 rol 8 之后 = 0x34567812 其原理如下: 1.首先左移八位得到 0x345678 2.然后右移24位得到 0x12 最后 0x345678 | 0x12 = 0x34567812 鉴于Python的特殊性.我们只需要32bit数即可. 也就是最后要 & 0xFFFFFFFF 其它移位同理
IBinary
2020/12/22
2.3K0
python『学习之路01』python 购物车精简版
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2017/11/17 1:52 # @Author : mixiu26 # shopping.py public_list = [ ("iphone",5800), ("Mac Book",11800), ("Bike",1200), ("Wtach",10600), ("Coffee",31), ("Book",66) ] Shopping_list = [] Salary = input("Input your salary: ") if Salary.isdigit(): salary = int(Salary) while True: for item in public_list: print(public_list.index(item),item) # index --- >返回指定元素索引 user_choice = input("请选择您需要的商品 >>>>: ") if user_choice.isdigit(): choice = int(user_choice) if choice >=0 and choice < len(public_list): p_item = public_list[choice] if p_item[1] <= salary: Shopping_list.append(p_item) # 余额扣款: salary -= p_item[1] print("Add %s into shppoing cart, your current balance is \033[31;1m%s\033[0m" %(p_item,salary)) else: print("\033[41;1m你的余额仅剩[%s], 请充值: \033[0m" % salary) else: print("The Product code [%s] your Input is not exist! " % choice) elif user_choice == "q": print("===================== shopping list ========================") for i in Shopping_list: print(i) print("Your current balance: ",salary) exit() else: print("没有查到当前编号对应的商品信息, 请重新输入: ") else: print("没有查到当前编号对应的商品信息, 已退出")
呆呆
2021/05/18
3800
Docker精简项目(Python3.6+Flask1.0+Pipenv)
项目采用最新版本的Flask和现在流行的Pipenv,virtualenv因为配置过程,使用过程都会遇到一些不小的麻烦,所以推荐使用pipenv来管理自己的项目环境。 引入的bigdata镜像里面,我已经封装好了supervisor、gunicorn、nginx,所以配置好nginx.conf和supervisor.conf即可 Dockerfile FROM registry.cn-hangzhou.aliyuncs.com/littleseven/bigdata # 根据我的基础镜像又封装的一个新的镜像
简单、
2018/07/18
1.6K6
手把手教你python画图(精简实例,一
1、不叨叨,直接上代码 import matplotlib.pyplot as plt x = [1,2,3,4,5] y = [0,3,2,7,9] plt.figure() plt.plot(
py3study
2020/01/06
4430
python 显示地图
之前写了一篇, 有份近10年的地震数据,你会怎样用python分析呢? 有人留言说,想要将数据显示地图上。 比如地震网上这种效果。 显示图表的库非常多,这里我们试用一个轻量级第三方 folium 库。 三行代码就可以在本地生成一个render.html地图网页文件。 import folium world_map = folium.Map(location=[28.5, 100.40], zoom_start=4) world_map.save('render.html') 详细使用可以查看其文档。
叶子陪你玩
2022/05/22
1.2K0
python 显示地图
Vuex精简文档
Vuex 通过 store 选项,提供了一种机制将状态从根组件“注入”到每一个子组件中(需调用 Vue.use(Vuex)):
神葳
2021/01/22
8640
Redis 精简笔记
Redis 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库,官方提供测试数据,50 个并发执行 100000 个请求,读的速度是 110000 次/s,写的速度是 81000 次/s ,且 Redis 通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止 Redis 支持的键值数据类型如下:
迷路的朱朱
2023/04/30
7190
Python3 | 练气期,入门精简基础语法!
前面我们已经尝试了Python程序的几种运行方式,并运行了第一个Hello World的Python程序,并且列举了 Python2 与 Python3 的部分差异!
全栈工程师修炼指南
2024/07/16
1440
Python3 | 练气期,入门精简基础语法!
OpenCv库的精简
cmake -G "Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=..\..\android\android.toolchain.cmake ..\..\..
jerrypxiao
2021/02/22
2.8K0
前端基础精简总结
ES5: String、Number、Boolean、Null、Undefined、Object ES6增: Symbol 其中,object为引用,其他为基本类型
超然
2018/09/27
1.7K0
前端基础精简总结
Python画图显示中文
matplotlib作图时默认设置下为英文,无法显示中文,只需要添加下面两行代码即可
全栈程序员站长
2022/09/05
1.4K0
显示python库路径
[root@localhost doc]# python -c “import sys;print sys.path” ['', '/usr/lib/python24.zip', '/usr/lib/python2.4', '/usr/lib/python2.4/plat-linux2', '/usr/lib/python2.4/lib-tk', '/usr/lib/python2.4/lib-dynload', '/usr/lib/python2.4/site-packages', '/usr/lib/python2.4/site-packages/Numeric', '/usr/lib/python2.4/site-packages/gtk-2.0']
py3study
2020/01/07
1.7K0
PYTHON之显示居中
把字体显示在屏幕的中间 sentence = raw_input("Sentence:") screen_width = 80text_width = len(sentence)box_width = text_width + 6left_margin = (screen_width - box_width) // 2 printprint ' '*left_margin + '+' + '-'*(box_width) + '+'print ' '*(left_margin+2) + '| ' + ' '*
py3study
2020/01/06
9360
Java 代码精简之道
其中:“道”指“规律、道理、理论”,“术”指“方法、技巧、技术”。意思是:“道”是“术”的灵魂,“术”是“道”的肉体;可以用“道”来统管“术”,也可以从“术”中获得“道”。
JAVA葵花宝典
2020/06/04
2.1K0
jmeter组件精简概述
jmeter是基于java语言的压力测试工具,除了通过命令来执行压测脚本,还提供图形界面功能。用户在图形界面中可以设置“测试计划”、“线程组”、“取样器”、“逻辑控制器”、“定时器”、“配置项”、“断言”、“变量”、“观察结果树”、“结果报表”、“结果图”。一开始接触这个工具时就感觉好多名词,记一遍忘一遍,忘一遍再记一遍。为了理清思路,我们可以从测试用例四大要素:条件、输入、执行、预期结果,来理解这些组件。先准备好条件和输入,然后执行测试,当实际结果与预期结果一致时,测试用例通过。正所谓万变不离其宗。
Criss@陈磊
2020/02/14
8940
jmeter组件精简概述
Python高频写法总结:精简代码,提高效率
今天为大家分享 Python高频写法总结:精简代码,提高效率,全文3400字,阅读大约12分钟。
老表
2023/12/13
3200
Python高频写法总结:精简代码,提高效率
虚拟目录+认证精简
NameVirtualHost 172.16.1.15:80 <VirtualHost 172.16.1.15:80> ServerName www.jnds.net DocumentRoot /var/www/html Alias /en "/data/CN" <Directory "data/CN"> AuthType Basic AuthName "test" AuthUserFile /etc/httpd/.htpasswd require user
呆呆
2021/05/17
1.2K0

相似问题

精简Javascript MomentJS函数

10

精简一系列除了+if以外的尝试语句,以加快Python的循环处理。

10

用于SFML的精简程序流的小型库

20

我能精简这个UTF8 8编码程序吗?

40

在Python窗口中显示多个视频

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文