R根据值拆分列

R根据值拆分列,r,R,我有以下数据,我想计算总分钟数,我想知道是否有可能将该列分成两列,其中一列为分钟,另一列为秒 > q time 1 0m 22s 2 1m 7s 3 3m 35s 4 11m 43s 5 1m 8s 6 2m 21s 7 9m 33s 8 0m 56s 9 0m 2s 10 0m 2s 11 0m 50s 12 0m 25s 13 0m 33s 14 2m 26s 15 0m 20s 16

我有以下数据,我想计算总分钟数,我想知道是否有可能将该列分成两列,其中一列为分钟,另一列为秒

> q
       time
1   0m 22s 
2    1m 7s 
3   3m 35s 
4  11m 43s 
5    1m 8s 
6   2m 21s 
7   9m 33s 
8   0m 56s 
9    0m 2s 
10   0m 2s 
11  0m 50s 
12  0m 25s 
13  0m 33s 
14  2m 26s 
15  0m 20s 
16  1m 47s 
17  0m 36s 
18   0m 3s 
19   0m 2s 
20   0m 5s 
==> 给予:


etc

注意:我相信还有更优雅的方法,但这是我想到的第一个解决方案

步骤1)删除字符(包括尾随空格):


Data我对日期不太熟悉,但您可以查看函数
如.Date
strtime
。 使用data.frame:

df <- data.frame(time = c("0m 22s", "1m 7s", "3m 35s", "11m 43s", "1m 8s", "2m 21s", "9m 33s", "0m 56s", "0m 2s", "0m 2s", "0m 50s", "0m 25s", "0m 33s", "2m 26s", "0m 20s", "1m 47s", "0m 36s", "0m 3s", "0m 2s", "0m 5s"))

df$time.2 <- strptime(df$time, "%Mm %Ss")
分配

df$min <- df[, "time.2"][["min"]]
df$sec <- df[, "time.2"][["sec"]]
编辑: 由于您只想拆分data.frame以计算总分钟数,因此您甚至不需要创建新列
min
sec
,只需使用列
time.2
。 这两个步骤已经足够了

df$time.2 <- strptime(df$time, "%Mm %Ss")
sum(df[, "time.2"][["min"]])

R> [1] 30
df$time.2[1]30

< /代码> 如果您需要快速解决方案,则应考虑基于<代码> gSub/COD> >的解决方案:

min <- as.numeric(sub("m.*$", "", time))
sec <- as.numeric(gsub("^.*\\ |s$", "", time))

min伟大的解决方案!但愿我能投更多的票。让我补充一点,我在一个粗糙的data.frame上测试了它,其中文本列具有不同数量的前导空格,它的性能完美无瑕。
df <- data.frame(time = c("0m 22s", "1m 7s", "3m 35s", "11m 43s", "1m 8s", "2m 21s", "9m 33s", "0m 56s", "0m 2s", "0m 2s", "0m 50s", "0m 25s", "0m 33s", "2m 26s", "0m 20s", "1m 47s", "0m 36s", "0m 3s", "0m 2s", "0m 5s"))

df$time.2 <- strptime(df$time, "%Mm %Ss")
attributes(df[, "time.2"])
df$min <- df[, "time.2"][["min"]]
df$sec <- df[, "time.2"][["sec"]]
R> df
      time              time.2 min sec
1   0m 22s 2010-12-02 00:00:22   0  22
2    1m 7s 2010-12-02 00:01:07   1   7
3   3m 35s 2010-12-02 00:03:35   3  35
4  11m 43s 2010-12-02 00:11:43  11  43
5    1m 8s 2010-12-02 00:01:08   1   8
6   2m 21s 2010-12-02 00:02:21   2  21
7   9m 33s 2010-12-02 00:09:33   9  33
8   0m 56s 2010-12-02 00:00:56   0  56
9    0m 2s 2010-12-02 00:00:02   0   2
10   0m 2s 2010-12-02 00:00:02   0   2
11  0m 50s 2010-12-02 00:00:50   0  50
12  0m 25s 2010-12-02 00:00:25   0  25
13  0m 33s 2010-12-02 00:00:33   0  33
14  2m 26s 2010-12-02 00:02:26   2  26
15  0m 20s 2010-12-02 00:00:20   0  20
16  1m 47s 2010-12-02 00:01:47   1  47
17  0m 36s 2010-12-02 00:00:36   0  36
18   0m 3s 2010-12-02 00:00:03   0   3
19   0m 2s 2010-12-02 00:00:02   0   2
20   0m 5s 2010-12-02 00:00:05   0   5
df$time.2 <- strptime(df$time, "%Mm %Ss")
sum(df[, "time.2"][["min"]])

R> [1] 30
min <- as.numeric(sub("m.*$", "", time))
sec <- as.numeric(gsub("^.*\\ |s$", "", time))