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))