在R中,如何从字符中提取分钟和秒

时间:2014-11-30 23:18:17

标签: r time

我正在尝试将R中的列拆分为分钟和秒。问题是,该列只是数字:例如它将具有“752”,“843”,“823”,“956”,(最多约2000是最高的)等...其代表7分钟和52秒,8分43秒,8分23秒等......我想把它分成两列。一列为分钟数,一列为秒数。然后我将使用这些列创建第三个“totalSeconds”,它将在7分52秒内获得“472”。

我一直在搜索,检查正则表达式等等。我似乎无法弄明白。这里的另一个类似问题向我指出函数'substr',但我坚持认为,因为每个变量并不总是具有相同的字符数,即752 vs 1145.任何帮助?或者至少也许有人可以指出我正确的方向?

3 个答案:

答案 0 :(得分:2)

如果角色的最后两个元素代表秒,剩余的前一个/两个元素/秒代表分钟,那么请尝试以下方法:

res <- data.frame(v = v, minutes = substr(v, 1, nchar(v)-2), seconds = substr(v, nchar(v)-1, nchar(v)))
> res
    v minutes seconds
1 752       7      52
2 843       8      43
3 823       8      23
4 956       9      56

为了计算总秒数:

res <- as.data.frame(apply(res, 2, function(x) as.double(as.character(x))))
res$tot.sec <- res$minutes*60 + res$seconds
> res
    v minutes seconds tot.sec
1 752       7      52     472
2 843       8      43     523
3 823       8      23     503
4 956       9      56     596

答案 1 :(得分:0)

在这个例子中:

 df=data.frame(D=round(1000*runif(100)))

D是包含字符串的列。如果你这样做:

df$MIN=ifelse(nchar(df$D)>=3,substr(df$D, 0,1),0) #if there are only seconds

这将返回分钟

df$SEC=substr(df$D, nchar(df$D)-1,nchar(df$D))

将返回秒数。

这是你想要的吗?

答案 2 :(得分:0)

您可以从“tidyr”中考虑separate。在这里,我将它与“dplyr”中的mutate结合使用,以获得您正在寻找的输出。

请注意,separate允许您指定字符串的左侧或字符串的右侧,具体取决于sep值是正还是负。这将允许我们适当地处理像“1000”这样的案件。

library(dplyr)
library(tidyr)

df %>% 
  separate(secs, into = c("min", "sec"), sep = -3) %>% 
  mutate(tot = as.numeric(min)*60 + as.numeric(sec))
#   min sec tot
# 1   7  52 472
# 2   8  43 523
# 3   8  23 503
# 4   9  56 596
# 5  10  00 600

样本数据:

df <- data.frame(secs = c("752","843","823", "956", "1000"))