R编程 - 将数字转换为MM:SS

Ter*_*rno 3 r numeric

这可能是个愚蠢的问题,但我找不到任何相关内容.

我有一个表示秒的数值.如何将其转换为MM:SS

例如

我的号码是96

代表MM:SS应该是01:36.

任何帮助表示赞赏.

Rei*_*son 9

%/%(整数除法)和%%()运算符是你的朋友:

x <- 96
paste(x %/% 60, x %% 60, sep = ":")
Run Code Online (Sandbox Code Playgroud)

这使

> paste(x %/% 60, x %% 60, sep = ":")
[1] "1:36"
Run Code Online (Sandbox Code Playgroud)

这是一个功能:

d2ms <- function(x) {
  paste(x %/% 60, x %% 60, sep = ":")
}

> xx <- c(120, 96, 45, 30)
> d2ms(xx)
[1] "2:0"  "1:36" "0:45" "0:30"
Run Code Online (Sandbox Code Playgroud)

这表明我们需要一些帮助来获得您需要的格式; 看看?sprint如何格式化数字[作为字符]与前导0等:

d2ms <- function(x) {
  sprintf("%02d:%02d", x %/%60, x %% 60)
}

> d2ms(xx)
[1] "02:00" "01:36" "00:45" "00:30"
Run Code Online (Sandbox Code Playgroud)

请注意,:上面的字符串中是一个文字,这些%xxy位是接下来两个参数中指定的值的格式,并包括要填充的零数的格式详细信息(即使用零填充,直到数字使用两位数.)模板这个用法是:

%[flag][width]specifier,

在这里我们使用:

  • 0作为旗帜---垫与0s
  • 宽度是2,我们想要MM或SS
  • 说明符是d整数(也可能是i)

无论您是否需要,都取决于您的最终用例.

这些运算符对于这些类型的运算非常有用; 另一个例子是将度,分,秒表示法转换为空间坐标的十进制度.

  • 我并没有因为这些指责而停止; 我提交了我的答案,意识到它不是100%完全是OP想要的,所以逻辑上的东西和sprintf-ed输出.`sprintf()`几乎不是古怪的R部分或计算用于输出字符串,因此不可能有两个人想出相同的解决方案. (2认同)

nic*_*ola 8

尝试:

x<-96
sprintf("%02d:%02d",x%/%60,x%%60)
#[1] "01:36"
Run Code Online (Sandbox Code Playgroud)