R 定制分拣时间和天数

R 定制分拣时间和天数,r,dplyr,R,Dplyr,我有包含小时和天的文本。我想按逻辑顺序对它们进行排序——小时应该先出现,然后是天 Time <- c("10 days ago", "9 days ago", "4 days ago", "2 days ago", "3 days ago", "6 days ago", "10 hours ago", "8 days ago",

我有包含小时和天的文本。我想按逻辑顺序对它们进行排序——小时应该先出现,然后是天

Time <- c("10 days ago", "9 days ago", "4 days ago", "2 days ago", "3 days ago", 
"6 days ago", "10 hours ago", "8 days ago", "5 days ago", "12 days ago", 
"8 hours ago")

Time这里有一个基本的R方法:

Time[order(match(sub('.*(hours|days).*', '\\1', Time), c('hours', 'days')), 
           as.numeric(gsub('\\D', '', Time)))]

# [1] "8 hours ago"  "10 hours ago" "2 days ago"   "3 days ago"  
# [5] "4 days ago"   "5 days ago"   "6 days ago"   "8 days ago"  
# [9] "9 days ago"   "10 days ago"  "12 days ago" 
我们使用两个变量对数据进行排序

  • 日复一日

    sub
    Time
    中提取“小时”或“天”,我们使用
    match
    生成1/2作为输出。1至小时,2至天

  • 按号码

    我们从
    时间
    中删除所有非数字的内容,并将其转换为数字


  • 以下是一种基本的R方法:

    Time[order(match(sub('.*(hours|days).*', '\\1', Time), c('hours', 'days')), 
               as.numeric(gsub('\\D', '', Time)))]
    
    # [1] "8 hours ago"  "10 hours ago" "2 days ago"   "3 days ago"  
    # [5] "4 days ago"   "5 days ago"   "6 days ago"   "8 days ago"  
    # [9] "9 days ago"   "10 days ago"  "12 days ago" 
    
    我们使用两个变量对数据进行排序

  • 日复一日

    sub
    Time
    中提取“小时”或“天”,我们使用
    match
    生成1/2作为输出。1至小时,2至天

  • 按号码

    我们从
    时间
    中删除所有非数字的内容,并将其转换为数字


  • 这些仅使用R的基

    1)它创建了一个包含三个字段的三列数据框(
    V1
    是数字,
    V2
    hour
    day
    V3
    ago
    )然后使用
    V2
    按降序执行适当的排序,并在
    V2
    内按升序执行
    V1
    排序<代码>顺序
    生成一个应用于时间的索引

    o <- with(read.table(text = Time), order(-xtfrm(V2), V1))
    Time[o]
    
    2)这是(1)的一个变体,因为TRUE在FALSE之后排序:

    o <- with(read.table(text = Time), order(V2 == "days", V1))
    Time[o]
    

    o这些只使用R的基

    1)它创建了一个包含三个字段的三列数据框(
    V1
    是数字,
    V2
    hour
    day
    V3
    ago
    )然后使用
    V2
    按降序执行适当的排序,并在
    V2
    内按升序执行
    V1
    排序<代码>顺序
    生成一个应用于时间的索引

    o <- with(read.table(text = Time), order(-xtfrm(V2), V1))
    Time[o]
    
    2)这是(1)的一个变体,因为TRUE在FALSE之后排序:

    o <- with(read.table(text = Time), order(V2 == "days", V1))
    Time[o]
    

    o您的数据中是否只有小时和天?是的,我只有这两个小时和天?您的数据中是否只有小时和天?是的,我只有这两个小时和天谢谢。我在data.frameIt中将此列作为一列,这不重要,对吗?您使用的不是
    Time
    而是
    df$column\u name
    ?谢谢。我在data.frameIt中将此列作为一列,这不重要,对吗?您使用的是
    df$column\u name
    ,而不是
    Time