R:如何从早到晚对每天的每小时测量进行排序,并根据此顺序添加一个数字?

标签 r sorting dataframe

我有一个更大的数据框部分:

[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/

相关文章:

objective-c - 如何按字母顺序对 NSArray 进行排序?

python - Pandas to_excel 在空白电子表格中写入数据框结果 - 如何使用 xlwt 写入 excel?

python - 将字典附加到数据框

r - 摆脱 R 中具有重复属性的行

r - 将 “rank”列添加到数据框

r - 集成 C 子函数以优化 R 代码

c++ - 如何在 C++ 中按字母顺序排列数组中的字符串?

r - is.null 不适用于 R 中的 null data.table [可能的错误]?

r - 从下一行的值向数据框添加一列

c# - 在 C# 中更改 DataTable 中的行的顺序