R 如何重新排列加载的时间序列数据?

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,

我得到的是一个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, 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
your
data.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