R 如何重新排列加载的时间序列数据?
我得到的是一个txt文件(mydata.txt)中的数据,如下所示:R 如何重新排列加载的时间序列数据?,r,data-structures,load,reshape,R,Data Structures,Load,Reshape,我得到的是一个txt文件(mydata.txt)中的数据,如下所示: Variable, DateTime, Value, Quality A, 01-01-1970 00:00:00, 0, 0 A, 01-01-1970 00:02:00, 2, 2 A, 01-01-1970 00:04:00, 4, 1 A, 01-01-1970 00:06:00, 6, 0 B, 01-01-1970 00:02:00, 0.2, 0 B, 01-01-1970 00:04:00, 0.4, 1 B,
Variable, DateTime, Value, Quality
A, 01-01-1970 00:00:00, 0, 0
A, 01-01-1970 00:02:00, 2, 2
A, 01-01-1970 00:04:00, 4, 1
A, 01-01-1970 00:06:00, 6, 0
B, 01-01-1970 00:02:00, 0.2, 0
B, 01-01-1970 00:04:00, 0.4, 1
B, 01-01-1970 00:06:00, 0.6, 1
B, 01-01-1970 00:10:00, 1.0, 0
C, 01-01-1970 00:00:00, 20.0, 0
C, 01-01-1970 00:04:00, 16.0, 0
C, 01-01-1970 00:08:00, 12.0, 3
DateTime, A_Value, A_Quality, B_Value, B_Quality, C_Value, C_Quality
01-01-1970 00:00:00, 0, 0, NA, NA, 20.0, 0
01-01-1970 00:02:00, 2, 2, 0.2, 0, NA, NA
01-01-1970 00:04:00, 4, 1, 0.4, 1, 16.0, 0
01-01-1970 00:06:00, 6, 0, 0.6, 1, NA, NA
01-01-1970 00:08:00, NA, NA, NA, NA, 12.0, 3
01-01-1970 00:10:00, NA, NA, 1.0, 0, NA, NA
我可以将它加载到R中,而不会出现任何问题
read.csv("mydata.txt", header = TRUE, sep = ",")
或
但是我想在r中使用的是这样的东西:
Variable, DateTime, Value, Quality
A, 01-01-1970 00:00:00, 0, 0
A, 01-01-1970 00:02:00, 2, 2
A, 01-01-1970 00:04:00, 4, 1
A, 01-01-1970 00:06:00, 6, 0
B, 01-01-1970 00:02:00, 0.2, 0
B, 01-01-1970 00:04:00, 0.4, 1
B, 01-01-1970 00:06:00, 0.6, 1
B, 01-01-1970 00:10:00, 1.0, 0
C, 01-01-1970 00:00:00, 20.0, 0
C, 01-01-1970 00:04:00, 16.0, 0
C, 01-01-1970 00:08:00, 12.0, 3
DateTime, A_Value, A_Quality, B_Value, B_Quality, C_Value, C_Quality
01-01-1970 00:00:00, 0, 0, NA, NA, 20.0, 0
01-01-1970 00:02:00, 2, 2, 0.2, 0, NA, NA
01-01-1970 00:04:00, 4, 1, 0.4, 1, 16.0, 0
01-01-1970 00:06:00, 6, 0, 0.6, 1, NA, NA
01-01-1970 00:08:00, NA, NA, NA, NA, 12.0, 3
01-01-1970 00:10:00, NA, NA, 1.0, 0, NA, NA
(其中第一列是日期/时间类型)
我不知道我的文件中有哪些或多少不同的变量(即A、B、Z),我也不知道它们的名称——我只知道它们的列
如何从文本文件中的数据集获取到要在R中使用的数据集
提前谢谢 您可以使用
重塑2
软件包:
第一步:melt
yourdata.frame
require(reshape2)
df.m <- melt(df, id.var = 1:2) # changed names(df)[1:2] to 1:2 (following @Anandamahto's comment)
正常读取您的数据:
mydata <- read.table("mydata.txt", header = TRUE, sep = ",")
令人惊叹的!工作得很有魅力。谢谢@阿伦,你有什么理由使用
idvar=names(df)[1:2]
?我认为,idvar=1:2
就足够了+1,当然。@Ananda,不,不是真的。我通常根本不说idvar
。我使用melt(df,names(df)[1:2])
。我会修改它。我从未直接使用过索引。谢谢你的提醒@Arun,我实际上更喜欢只输入一个名称向量,以防我决定更改列的顺序或其他函数更改列的顺序。我知道这是很少见的事,但我更喜欢尽可能直截了当。谢谢!效果也很好。可以看出我需要按日期时间排序。当我这样做的时候,记录的数字从4到8,从8到11是怎么回事?@MortenGrum,是的。与“重塑2”中的方法不同,重塑
不会假设您希望同时对数据进行排序,而是按照遇到的IDVariable的顺序返回数据。一个简单的mydf[order(mydf$DateTime),]
将为您解决这个问题。类似地,行名称(记录编号)与函数在源数据中遇到“idvar”的第一行相关。您会注意到,“00:10:00”的第一次出现在示例数据的第8行,因此这就是您在这里看到的行名称。
reshape(mydata, direction = "wide", idvar = "DateTime", timevar = "Variable")
# DateTime Value.A Quality.A Value.B Quality.B Value.C Quality.C
# 1 01-01-1970 00:00:00 0 0 NA NA 20 0
# 2 01-01-1970 00:02:00 2 2 0.2 0 NA NA
# 3 01-01-1970 00:04:00 4 1 0.4 1 16 0
# 4 01-01-1970 00:06:00 6 0 0.6 1 NA NA
# 8 01-01-1970 00:10:00 NA NA 1.0 0 NA NA
# 11 01-01-1970 00:08:00 NA NA NA NA 12 3