首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中字符向量的排序

R中字符向量的排序
EN

Stack Overflow用户
提问于 2015-01-26 15:04:53
回答 4查看 115关注 0票数 1

我有一个向量,我需要按降序排序。首先,最新的txt:

代码语言:javascript
复制
d<-c("/SiteScope/accounts/login59/htdocs/Reports-1722992141/Report-02_06-01_04_2015.txt","/SiteScope/accounts/login59/htdocs/Reports-1722992141/Report-02_06-01_11_2015.txt","/SiteScope/accounts/login59/htdocs/Reports-1722992141/Report-02_06-01_18_2015.txt","/SiteScope/accounts/login59/htdocs/Reports-1722992141/Report-02_08-01_25_2015.txt","/SiteScope/accounts/login59/htdocs/Reports-1722992141/Report-11_25-01_20_2015.txt")

当我这么做时:

代码语言:javascript
复制
d <- sort(d)

d[1]
# "/SiteScope/accounts/login59/htdocs/Reports-1722992141/Report-02_06-01_04_2015.txt"

应该是这样的:

代码语言:javascript
复制
"/SiteScope/accounts/login59/htdocs/Reports-1722992141/Report-02_08-01_25_2015.txt"

我应该能够按照文本"11_25-01_20_2015“中的条目对此进行排序,其中11为小时、25分钟、01月、20日和2015年,即小时分钟月_日_年。

我怎么能这么做?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-01-26 15:25:53

如果字符串的结尾是一致的,(bla-bla-bla-time-date.txt),,则可以使用substring提取时间。然后将时间转换为as.POSIXct并在order中使用它们

代码语言:javascript
复制
time <- substring(d, first = nchar(d)-19)
d[order(as.POSIXct(time, format = "%H_%M-%m_%d_%Y.txt"), decreasing = TRUE)]
# [1] "/SiteScope/accounts/login59/htdocs/Reports-1722992141/Report-02_08-01_25_2015.txt"
# [2] "/SiteScope/accounts/login59/htdocs/Reports-1722992141/Report-11_25-01_20_2015.txt"
# [3] "/SiteScope/accounts/login59/htdocs/Reports-1722992141/Report-02_06-01_18_2015.txt"
# [4] "/SiteScope/accounts/login59/htdocs/Reports-1722992141/Report-02_06-01_11_2015.txt"
# [5] "/SiteScope/accounts/login59/htdocs/Reports-1722992141/Report-02_06-01_04_2015.txt"
票数 5
EN

Stack Overflow用户

发布于 2015-01-26 15:26:41

首先,你应该提取时间,并将它们以合理的格式写成:

代码语言:javascript
复制
times <- as.POSIXct(sub("^.+Report-([0-9]+)_([0-9]+)-([0-9]+)_([0-9]+)_([0-9]+)\\.txt$","\\5-\\3-\\4 \\1:\\2",d))
times
[1] "2015-01-04 02:06:00 GMT" "2015-01-11 02:06:00 GMT"
[3] "2015-01-18 02:06:00 GMT" "2015-01-25 02:08:00 GMT"
[5] "2015-01-20 11:25:00 GMT"

然后您可以使用这些来排序原始数据:

代码语言:javascript
复制
d[order(times, decreasing=TRUE)][1]
[1] "/SiteScope/accounts/login59/htdocs/Reports-1722992141/Report-02_08-01_25_2015.txt"
票数 3
EN

Stack Overflow用户

发布于 2015-01-26 15:22:54

试试这个:

代码语言:javascript
复制
# trim everythin before the string 'Report-'
dateSting <- gsub('^.*Report-','',d )
# trim the '.txt' from the end.
dateSting <- gsub('\\.txt$','',dateSting )
#convert the date string to a date-time object
dateTime  <-  as.POSIXct(dateSting,'%H_%M-%m_%d_%Y')
# sort on date time 
d <- d[order(dateTime)]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28152764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档