我在处理一个非常基础的问题:基于时间格式(月份-年份,或者在这种情况下是“%B-%y”)对数据框进行排序。我的目标是计算各种月度统计数据,首先是总和。
数据框的相关部分如下所示*(这一步顺利完成,并符合我的目标。我在这里包含它,以展示问题可能出现的地方)*:
数据框的相关部分如下所示*(这一步顺利完成,并符合我的目标。我在这里包含它,以展示问题可能出现的地方)*:
> tmp09
Instrument AccountValue monthYear ExitTime
1 JPM 6997 april-07 2007-04-10
2 JPM 7261 mei-07 2007-05-29
3 JPM 7545 juli-07 2007-07-18
4 JPM 7614 juli-07 2007-07-19
5 JPM 7897 augustus-07 2007-08-22
10 JPM 7423 november-07 2007-11-02
11 KFT 6992 mei-07 2007-05-14
12 KFT 6944 mei-07 2007-05-21
13 KFT 7069 juli-07 2007-07-09
14 KFT 6919 juli-07 2007-07-16
# Order on the exit time, which corresponds with 'monthYear'
> tmp09.sorted <- tmp09[order(tmp09$ExitTime),]
> tmp09.sorted
Instrument AccountValue monthYear ExitTime
1 JPM 6997 april-07 2007-04-10
11 KFT 6992 mei-07 2007-05-14
12 KFT 6944 mei-07 2007-05-21
2 JPM 7261 mei-07 2007-05-29
13 KFT 7069 juli-07 2007-07-09
14 KFT 6919 juli-07 2007-07-16
3 JPM 7545 juli-07 2007-07-18
4 JPM 7614 juli-07 2007-07-19
5 JPM 7897 augustus-07 2007-08-22
10 JPM 7423 november-07 2007-11-02
到目前为止,根据ExitTime进行排序是有效的。但当我尝试计算每月的总数,并试图对此输出进行排序时,问题就出现了:
# Calculate the total results per month
> Tmp09Totals <- tapply(tmp09.sorted$AccountValue, tmp09.sorted$monthYear, sum)
> Tmp09Totals <- data.frame(Tmp09Totals)
> Tmp09Totals
Tmp09Totals
april-07 6997
augustus-07 7897
juli-07 29147
mei-07 21197
november-07 7423
如何按时间顺序排序输出结果?
我已经尝试过(除了各种尝试将 monthYear 转换为其他日期格式之外):order、sort、sort.list、sort_df、reshape,并根据 tapply、lapply、sapply、aggregate 计算总和。甚至重写行名(通过为它们赋予从1到 length(tmp09.sorted2$AccountValue
) 的数字)也不起作用。我还尝试基于在另一个问题中学到的内容为每个月份-年份分配不同的 ID,但是 R 也很难区分不同的月份-年份值。
这个输出的正确顺序应该是 april-07,mei-07,juli-07,augustus07, november-07
:
apr-07 6997
mei-07 21197
jul-07 29147
aug-07 7897
nov-07 7423
?month.name
在您当前语言环境的月份名称方面有以下示例:format(ISOdate(2000, 1:12, 1), "%B")
,这可能会节省您每次使用它们时键入月份名称的时间。 - Gavin Simpson