【问题标题】:R + converting a integer to a hh:mm format using regex + gsubR + 使用 regex + gsub 将整数转换为 hh:mm 格式
【发布时间】:2014-10-08 22:29:52
【问题描述】:

间隔是 25 小时内 5 分钟间隔的子集

> interval
 [1]   45   50   55  100  105  110  115  120  125  130  135 2035 2040 2045 2050 2055 2100 2105 2110 2115 2120 2125

我想插入: 以将其放入我可以转换为时间格式的时间格式

> gsub('^([0-9]{1,2})([0-9]{2})$', '\\1:\\2', interval)
 [1] "45"    "50"    "55"    "1:00"  "1:05"  "1:10"  "1:15"  "1:20"  "1:25"  "1:30"  "1:35"  "20:35" "20:40" "20:45"
[15] "20:50" "20:55" "21:00" "21:05" "21:10" "21:15" "21:20" "21:25"

我几乎可以在所有示例中使用它。
我如何获得它以便它适用于数字"5" ... "45" "50" "55"

在此处找到此副本,但这不使用 gsub

【问题讨论】:

    标签: regex r


    【解决方案1】:

    一个简单的方法是确保所有输入至少有 4 个字符:

    gsub('^([0-9]{1,2})([0-9]{2})$', '\\1:\\2', sprintf('%04d',interval))
    # "00:45" "00:50" "00:55" "01:00" "01:05" "01:10" "01:15" "01:20" "01:25"
    # "01:30" "01:35" "20:35" "20:40" "20:45" "20:50" "20:55" "21:00" "21:05"
    # "21:10" "21:15" "21:20" "21:25"
    

    【讨论】:

    • 认为这可能很容易 :) 您能否简要解释一下%04d,以便我清楚和参考。 tks
    • 或变体:sub("(..)", "\\1:", sprintf("%04d", interval))
    • 尝试运行sprintf('%04d',interval),以便了解它的作用。您可以查看?sprintf 以获取有关该函数如何工作以及如何指定不同格式的一些示例。如您所见,它在数字左侧填充零,直到有四位数字(在本例中)。 sprintf 是来自 C 语言的一个非常古老的函数,具有神秘的语法。我使用它是因为我知道如何快速完成基本的事情,而不是因为它易于学习。
    • tks,我确实运行了sprintf('%04d',interval),我更关注%d,但我想那是jsut 语法。
    【解决方案2】:

    使用sub

    > sub('..\\K', ':', sprintf('%04d',interval), perl=T)
    #  [1] "00:45" "00:50" "00:55" "01:00" "01:05" "01:10" "01:15" "01:20" "01:25"
    # [10] "01:30" "01:35" "20:35" "20:40" "20:45" "20:50" "20:55" "21:00" "21:05"
    # [19] "21:10" "21:15" "21:20" "21:25"
    

    【讨论】:

      猜你喜欢
      • 2021-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-06
      相关资源
      最近更新 更多