R 根据格式化为%d/%m/%Y的日期按时间顺序排列数据帧
我有一些数据必须格式化为(%d/%m/%Y)。数据的时间顺序不正确,因为它是按第一个数字排序的,第一个数字是日期,而不是月份 我希望我可以指定R 根据格式化为%d/%m/%Y的日期按时间顺序排列数据帧,r,date-formatting,R,Date Formatting,我有一些数据必须格式化为(%d/%m/%Y)。数据的时间顺序不正确,因为它是按第一个数字排序的,第一个数字是日期,而不是月份 我希望我可以指定排序或重新排序,我希望排序以不同的方式进行。我只是不知道该怎么做 以下是一些需要订购的日期数据: date 1/1/2009 1/1/2010 1/1/2011 5/4/2009 5/4/2011 10/2/2009 10/3/2011 15/9/2010 15/3/2009 31/12/2011 31/7/2009 谢谢您的建议。按列订购时日期转换
排序
或重新排序
,我希望排序以不同的方式进行。我只是不知道该怎么做
以下是一些需要订购的日期数据:
date
1/1/2009
1/1/2010
1/1/2011
5/4/2009
5/4/2011
10/2/2009
10/3/2011
15/9/2010
15/3/2009
31/12/2011
31/7/2009
谢谢您的建议。按列订购时
日期
转换日期格式
df[order(as.Date(df$date,format="%d/%m/%Y")),,drop=FALSE]
date
1 1/1/2009
6 10/2/2009
9 15/3/2009
4 5/4/2009
11 31/7/2009
2 1/1/2010
8 15/9/2010
3 1/1/2011
7 10/3/2011
5 5/4/2011
10 31/12/2011
丑陋但似乎有效:
date[order(sapply(strsplit(date, "/"),
function(x) { paste(x[3], sprintf("%02d", as.integer(x[1])),
sprintf("%02d", as.integer(x[2])),
sep="")
}
)
)
]
在plyr和lubridate的帮助下,这更容易:
library(lubridate)
library(plyr)
df <- read.csv(text = "date
1/1/2009
1/1/2010
1/1/2011
5/4/2009
5/4/2011
10/2/2009
10/3/2011
15/9/2010
15/3/2009
31/12/2011
31/7/2009", stringsAsFactors = FALSE)
# Convert variable to date
df$date <- dmy(df$date)
arrange(df, date)
# Or for descending order
arrange(df, desc(date))
库(lubridate)
图书馆(plyr)
df您是否介意在代码中添加一些注释和缩进,以便我们能够更好地阅读它(并避免水平滚动)?谢谢!这让我想知道有多少次我不得不告诉R某件事是一个日期,但我猜答案是“每次”。我不同意你在这里说的更容易,因为公认的解决方案不需要附加软件包,并且在一个声明中解决了这个问题。如果你愿意,欢迎你玩代码高尔夫。我认为我的解决方案是一个很好的选择,因为你不需要知道日期格式字符串是如何工作的,也不需要知道为什么你需要drop=FALSE
你可以通过替换/重新定义R的每一个方面,将R重新定义为“H”。唐·吉诃德,西班牙还有很多风车供你大喊:)谢谢,@hadley。我一直在努力使用R中的日期,所以我一定会研究lubridate。我会说@hadley为胜利。至少对我来说,作为日期导入并使用语法非常接近NL的函数比在函数中强制转换为日期更容易。当然,公认的答案并不坏,但对于新手来说,很难解析。软件包的全部功能不是改造了R,使编码更加精简吗?您是否还希望将该日期字符串保留为其原始格式,例如用于在绘图上标记记号?i、 e.保存为单独的列