我有一些日期格式如下:
V1 V2 V3
1 20100420 915 120
2 20100420 920 150
3 20100420 925 270
4 20100420 1530 281
每行3列,第1行表示:2010-04-20 09:15 120
现在我想将其更改为1列(时间序列):
V3
1 20100420 09:15 120
2 20100420 09:20 150
3 20100420 09:25 270
4 20100420 15:30 281
或:
V3
1 20100420 9:15 120
2 20100420 9:20 150
3 20100420 9:25 270
4 20100420 15:30 281
我怎样才能在R中实现它?
答案 0 :(得分:5)
?strptime
和?sprintf
是您的朋友:
重新创建数据集:
test <- read.table(textConnection("V1 V2 V3
20100420 915 120
20100420 920 150
20100420 925 270"),header=TRUE)
做一些粘贴:
strptime(
paste(
test$V1,
sprintf("%04d", test$V2),
sep=""
),
format="%Y%m%d%H%M"
)
结果:
[1] "2010-04-20 09:15:00" "2010-04-20 09:20:00" "2010-04-20 09:25:00"
答案 1 :(得分:3)
首先,修复您的格式并使用像xts
这样的包来获取正确的时间序列对象:
# Read in the data. In the future, use `dput` or something else
# so that others can read in the data in a more convenient way
temp = read.table(header=TRUE, text=" V1 V2 V3
1 20100420 915 120
2 20100420 920 150
3 20100420 925 270
4 20100420 1530 281")
# Get your date object and format it to a date/time object
date = paste0(temp[[1]], apply(temp[2], 1, function(x) sprintf("%04.f", x)))
date = strptime(date, format="%Y%m%d%H%M")
# Extract just the values
values = temp[[3]]
# Load the xts package and convert your dataset
require(xts)
xts(values, order.by=date)
# [,1]
# 2010-04-20 09:15:00 120
# 2010-04-20 09:20:00 150
# 2010-04-20 09:25:00 270
# 2010-04-20 15:30:00 281
在日期转换中:
apply(temp[2], 1, ...)
逐行进入第二列temp,并将数字重新格式化为四位数。 paste0
将所有日期时间信息组合到一个矢量中。strptime
将该字符向量转换为适当的日期时间对象。当然,如果你只想要一个普通的data.frame
,你也可以这样做,但如果你想做实时系列,我强烈建议使用zoo
或xts
之类的东西。分析
这是简单的data.frame
步骤(之前创建date
和values
对象之后的步骤。)
data.frame(V3 = values, row.names=date)
# V3
# 2010-04-20 09:15:00 120
# 2010-04-20 09:20:00 150
# 2010-04-20 09:25:00 270
# 2010-04-20 15:30:00 281