R中基于时间的复杂子集划分
我有很多时间数据(YYYY/MM/DD HH:MM:SS.SSS)以不规则的数千秒间隔存储。在每个时间段有十个空间测量值(X、Y和Z值) 我希望得到的是数据的一个子集,例如每半秒(或几分之一秒)进行一组十次空间测量 我是R的新手,所以非常感谢您的帮助 以下是2次测量的示例:R中基于时间的复杂子集划分,r,R,我有很多时间数据(YYYY/MM/DD HH:MM:SS.SSS)以不规则的数千秒间隔存储。在每个时间段有十个空间测量值(X、Y和Z值) 我希望得到的是数据的一个子集,例如每半秒(或几分之一秒)进行一组十次空间测量 我是R的新手,所以非常感谢您的帮助 以下是2次测量的示例: 2012/09/21 14:59:07:712,A,0.036,0.224,0.814 2012/09/21 14:59:07:712,B,0.042,0.057,0.934 2012/09/21 14:59:07:712,
2012/09/21 14:59:07:712,A,0.036,0.224,0.814
2012/09/21 14:59:07:712,B,0.042,0.057,0.934
2012/09/21 14:59:07:712,C,-0.104,0.008,0.930
2012/09/21 14:59:07:712,D,0.158,0.001,0.914
2012/09/21 14:59:07:712,E,-0.208,-0.168,0.778
2012/09/21 14:59:07:712,F,-0.185,0.087,0.748
2012/09/21 14:59:07:712,G,-0.176,0.155,0.738
2012/09/21 14:59:07:712,H,0.236,-0.171,0.790
2012/09/21 14:59:07:712,I,0.244,0.076,0.732
2012/09/21 14:59:07:712,J,0.248,0.137, 0.722
2012/09/21 14:59:07:848,A,0.036,0.224,0.814
2012/09/21 14:59:07:848,B,0.042,0.057,0.934
2012/09/21 14:59:07:848,C,-0.104,0.008,0.930
2012/09/21 14:59:07:848,D,0.158,0.001,0.914
2012/09/21 14:59:07:848,E,-0.208,-0.168,0.778
2012/09/21 14:59:07:848,F,-0.185,0.087,0.748
2012/09/21 14:59:07:848,G,-0.176,0.155,0.738
2012/09/21 14:59:07:848,H,0.236,-0.171,0.790
2012/09/21 14:59:07:848,I,0.244,0.076,0.732
2012/09/21 14:59:07:848,J,0.248,0.137, 0.722
你想做什么还不清楚。您可以从读取数据开始。因为它是不规则的时间序列,并且包含一个因子变量(第一组),所以不能使用像
zoo
或xts
这样方便的包,因为它们需要一个矩阵作为结构。但您可以从数据中使用fread
。表
包:
library(data.table)
dat <- fread('2012/09/21 14:59:07:712,A,0.036,0.224,0.814
2012/09/21 14:59:07:712,B,0.042,0.057,0.934
2012/09/21 14:59:07:712,C,-0.104,0.008,0.930
2012/09/21 14:59:07:712,D,0.158,0.001,0.914
2012/09/21 14:59:07:712,E,-0.208,-0.168,0.778
2012/09/21 14:59:07:712,F,-0.185,0.087,0.748
2012/09/21 14:59:07:712,G,-0.176,0.155,0.738
2012/09/21 14:59:07:712,H,0.236,-0.171,0.790
2012/09/21 14:59:07:712,I,0.244,0.076,0.732
2012/09/21 14:59:07:712,J,0.248,0.137, 0.722
2012/09/21 14:59:07:848,A,0.036,0.224,0.814
2012/09/21 14:59:07:848,B,0.042,0.057,0.934
2012/09/21 14:59:07:848,C,-0.104,0.008,0.930
2012/09/21 14:59:07:848,D,0.158,0.001,0.914
2012/09/21 14:59:07:848,E,-0.208,-0.168,0.778
2012/09/21 14:59:07:848,F,-0.185,0.087,0.748
2012/09/21 14:59:07:848,G,-0.176,0.155,0.738
2012/09/21 14:59:07:848,H,0.236,-0.171,0.790
2012/09/21 14:59:07:848,I,0.244,0.076,0.732
2012/09/21 14:59:07:848,J,0.248,0.137, 0.722',header=FALSE)
下面是我提出的解决方案,它能够解决这个问题(唯一的缺点是它无法以1秒的间隔创建移动平均线):
数据\u ID\u P001欢迎使用堆栈溢出!请提供更好的样本数据或可复制的示例,以便这里的优秀人员能够更好地帮助您。请参阅,其中还包括您迄今为止尝试过的内容。这不是免费完成工作的地方。又来了。让我试着更好地解释一下我想做什么。因此,我可以毫无问题地将数据加载到R中(我使用的是推断器)。我还可以将第一列从字符转换为时间。我遇到的问题是如何根据时间选择数据的子集。例如,假设我想每十分之一秒制作每组10个样本的第一个实例的子集(即,a-J,10行都是同时测量的)。这更有意义吗?我猜我需要使用某种类型的循环结构。或者是韦翰的plyr套餐。我知道subset函数允许您根据行中的特定值创建子集,但我不知道如何调整条件语句,以便它可以选择移动时间窗口中的第一个匹配项(例如,半秒内的第一个匹配项)。
dat[V2 %in% LETTERS[1:5],]
V1 V2 V3 V4 V5
1: 2012/09/21 14:59:07:712 A 0.036 0.224 0.814
2: 2012/09/21 14:59:07:712 B 0.042 0.057 0.934
3: 2012/09/21 14:59:07:712 C -0.104 0.008 0.930
4: 2012/09/21 14:59:07:712 D 0.158 0.001 0.914
5: 2012/09/21 14:59:07:712 E -0.208 -0.168 0.778
6: 2012/09/21 14:59:07:848 A 0.036 0.224 0.814
7: 2012/09/21 14:59:07:848 B 0.042 0.057 0.934
8: 2012/09/21 14:59:07:848 C -0.104 0.008 0.930
9: 2012/09/21 14:59:07:848 D 0.158 0.001 0.914
10: 2012/09/21 14:59:07:848 E -0.208 -0.168 0.778