提取因子的一部分

时间:2014-09-01 22:04:28

标签: r

我正在尝试提取data.frame内的因子的部分内容,如下所示:

aug$V5 <- c("00:00:00","01:01:05","04:32:22")

格式是一个因素,我想提取前两位数字,因为它们是我感兴趣的小时数,并将它们放在我的矢量中的不同列中:

输出如下:

aug$hours <- c("00","01","04")

我想我只需要使用子功能,但我不确定。

感谢。

4 个答案:

答案 0 :(得分:1)

或者使用一些基本R日期操作

V5 <- factor(c("00:00:00","01:01:05","04:32:22"))
as.POSIXlt(paste(Sys.Date(), V5))$hour
## [1] 0 1 4

答案 1 :(得分:0)

如果我在这里创建一个简单的示例因素

V5 <- factor(c("00:00:00","01:01:05","04:32:22"))

然后运行

gsub("^(\\d{2}).*","\\1",as.character(V5))

返回

[1] "00" "01" "04"

根据需要。

答案 2 :(得分:0)

lubridate救援

> v <- c("00:00:00","01:01:05","04:32:22")
> library(lubridate)
> hour(hms(factor(v)))
[1] 0 1 4

或只是取一个子串

> substr(factor(v),1,2)
[1] "00" "01" "04"

答案 3 :(得分:0)

另一种解决方案:

V5 <- factor(c("00:00:00","01:01:05","04:32:22"))

data.frame(strsplit(as.character(V5), ':'))[1,]
  c..00....00....00.. c..01....01....05.. c..04....32....22..
1                  00                  01                  04

可以忽略上面的名字,或者:

setNames(data.frame(strsplit(as.character(V5), ':'))[1,],seq(length(V5)))
   1  2  3
1 00 01 04

更好的是按照@Ananda Mahto在下面的评论中的建议:

sapply(strsplit(as.character(V5), ':'), '[[', 1) 
[1] "00" "01" "04"