在R中的空格处分割因子

时间:2014-06-27 09:26:29

标签: r

我想分割x(这是一个因素)

dd = data.frame(x = c("29-4-2014 06:00:00", "9-4-2014 12:00:00", "9-4-2014 00:00:00", "6-5-2014 00:00:00" ,"7-4-2014 00:00:00" , "29-5-2014 00:00:00"))

          x
29-4-2014 06:00:00
 9-4-2014 12:00:00
 9-4-2014 00:00:00
 6-5-2014 00:00:00
 7-4-2014 00:00:00
29-5-2014 00:00:00

在水平空间并得到两列:

  x.date   x.time
29-4-2014 06:00:00
 9-4-2014 12:00:00
 9-4-2014 00:00:00
 6-5-2014 00:00:00
 7-4-2014 00:00:00
29-5-2014 00:00:00

任何建议都表示赞赏!

3 个答案:

答案 0 :(得分:4)

此处通常使用

strsplit,但您也可以使用read.table

read.table(text = as.character(dd$x))
#          V1       V2
# 1 29-4-2014 06:00:00
# 2  9-4-2014 12:00:00
# 3  9-4-2014 00:00:00
# 4  6-5-2014 00:00:00
# 5  7-4-2014 00:00:00
# 6 29-5-2014 00:00:00

答案 1 :(得分:4)

其他选项(更好)

# Convert to POSIXct objects
times <- as.POSIXct(dd$x, format="%d-%m-%Y %T")
# You may also want to specify the time zone    
times <- as.POSIXct(dd$x, format="%d-%m-%Y %T", tz="GMT")

然后,提取时间

strftime(times, "%T")
[1] "06:00:00" "12:00:00" "00:00:00" "00:00:00" "00:00:00" "00:00:00"

或日期

strftime(times, "%D")
[1] "04/29/14" "04/09/14" "04/09/14" "05/06/14" "04/07/14" "05/29/14"

或者,你想要的任何格式,真的

strftime(times, "%d %b %Y at %T")
[1] "29 Apr 2014 at 06:00:00" "09 Apr 2014 at 12:00:00"
[3] "09 Apr 2014 at 00:00:00" "06 May 2014 at 00:00:00"
[5] "07 Apr 2014 at 00:00:00" "29 May 2014 at 00:00:00"

有关详细信息,请参阅:?as.POSIXct?strftime

答案 2 :(得分:1)

以下是使用lubridate的另一种方法:

dd = data.frame(x = c("29-4-2014 06:00:00", "9-4-2014 12:00:00", "9-4-2014 00:00:00", "6-5-2014 00:00:00" ,"7-4-2014 00:00:00" , "29-5-2014 00:00:00"),
                stringsAsFactors = FALSE)

请注意使用stringsAsFactors = FALSE,这会阻止您将日期视为因素。

library(lubridate)

dd2 <- transform(dd,x2 = dmy_hms(x))
transform(dd2, the_year = year(x2))

                   x                  x2 the_year
1 29-4-2014 06:00:00 2014-04-29 06:00:00     2014
2  9-4-2014 12:00:00 2014-04-09 12:00:00     2014
3  9-4-2014 00:00:00 2014-04-09 00:00:00     2014
4  6-5-2014 00:00:00 2014-05-06 00:00:00     2014
5  7-4-2014 00:00:00 2014-04-07 00:00:00     2014
6 29-5-2014 00:00:00 2014-05-29 00:00:00     2014