我有一个更大的数据框部分:
[7111,] 20100321 0.8000000
[7112,] 20100321 0.1000000
[7113,] 20100322 0.3000000
[7114,] 20100324 0.4000000
[7115,] 20100324 0.2000000
[7116,] 20100325 0.4000000
[7117,] 20100326 0.7000000
[7118,] 20100327 0.4000000
[7119,] 20100328 0.1000000
[7120,] 20100328 0.9000000
[7121,] 20100328 0.2000000
[7122,] 20100329 0.7000000
第一列包含日期,第二列包含在该日期进行测量的时刻(例如:0.0 = 00:00 小时和 0.5 = 12:00 小时)。正如您所看到的,有些日期有多个度量。
这就是我想要做的:
我想将每个日期的时间数据在其特定日期从低到高排序,并根据此顺序添加一个数字(1 是最早的测量值,之后是 2...3 等。要得到这样的结果:
[7111,] 20100321 0.1000000 1
[7112,] 20100321 0.8000000 2
[7113,] 20100322 0.3000000 1
[7114,] 20100324 0.2000000 1
[7115,] 20100324 0.4000000 2
[7116,] 20100325 0.4000000 1
[7117,] 20100326 0.7000000 2
[7118,] 20100327 0.4000000 1
[7119,] 20100328 0.1000000 1
[7120,] 20100328 0.2000000 2
[7121,] 20100328 0.9000000 3
[7122,] 20100329 0.7000000 1
有谁知道如何做到这一点?帮助会很棒!
最佳答案
您可以 order
您的 data.frame
然后使用 ave
非常快速地创建第三列:
df <- df [ order( df$V1 , df$V2 ) , ]
df$ID <- ave( df$V2 , df$V1 , FUN = function(x) 1:length(x) )
# V1 V2 ID
#2 20100321 0.1 1
#1 20100321 0.8 2
#3 20100322 0.3 1
#5 20100324 0.2 1
#4 20100324 0.4 2
#6 20100325 0.4 1
#7 20100326 0.7 1
#8 20100327 0.4 1
#9 20100328 0.1 1
#11 20100328 0.2 2
#10 20100328 0.9 3
#12 20100329 0.7 1
ave
获取数据帧的子集,并为从 1 到 nrow(x)
的每个子集返回一个向量哪里x
是当前子集。它将它们作为我们附加到 data.frame
的一个长向量返回。然后按日期列排序 V1
在我的例子中,然后是 ID
柱子。
关于R:如何从早到晚对每天的每小时测量进行排序,并根据此顺序添加一个数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16484645/