将日期列添加到数据框

时间:2017-01-09 18:52:21

标签: r date

我是R的新手,我正在尝试创建一个循环来在我的数据框中添加日期列,该日期列按天增加到设定的日期。

我的数据如下:

'A'  'B'  'C'
 1    2    3
 1    2    3
 4    5    6
 4    5    6

我正在尝试添加日期列,因此数据如下所示:

'A'  'B'  'C'  'Date'
 1    2    3    1/1
 1    2    3    1/1
 4    5    6    1/1
 4    5    6    1/1
 1    2    3    1/2
 1    2    3    1/2
 4    5    6    1/2
 4    5    6    1/2
 1    2    3    1/3
 1    2    3    1/3
 4    5    6    1/3
 4    5    6    1/3

我感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

要复制问题中的内容,我们首先要创建数据:

df = data.frame(a = c(1,1,4,4), b = c(2,2,5,5), c = c(3,3,6,6))

您为字符串的每个值复制数据,其中包含值1/11/21/31/4

# construct the values
values = paste("1", 1:4, sep = "/")

如果我们每次重复这些值4次(4是原始数据中的行数)并将其作为列添加到原始数据中,则其他行将被"再循环" - 重复它们的值 - 以匹配相同的长度:

# could change to `each = nrow(df)` to be more general
cbind(df, date = rep(values, each = 4))
#    a b c date
# 1  1 2 3  1/1
# 2  1 2 3  1/1
# 3  4 5 6  1/1
# 4  4 5 6  1/1
# 5  1 2 3  1/2
# 6  1 2 3  1/2
# 7  4 5 6  1/2
# 8  4 5 6  1/2
# 9  1 2 3  1/3
# 10 1 2 3  1/3
# 11 4 5 6  1/3
# 12 4 5 6  1/3

这些不是日期,它们只是字符串。

使用Date类对象

如果您想要课程Date的日期,可以使用as.Date创建,seq可以用来创建Date的序列。通过修改上面的values定义,我们可以改为使用Date类,其余代码保持不变。

values = seq(from = as.Date("2017-01-01"), to = as.Date("2017-01-03"), by = 'day')

使用merge代替回收

组合数据和日期的另一个选择是使用merge进行交叉连接。使用merge,我们不必担心原始数据的大小:

merge(df, values, all = T)
#    a b c          y
# 1  1 2 3 2017-01-01
# 2  1 2 3 2017-01-01
# 3  4 5 6 2017-01-01
# 4  4 5 6 2017-01-01
# 5  1 2 3 2017-01-02
# 6  1 2 3 2017-01-02
# 7  4 5 6 2017-01-02
# 8  4 5 6 2017-01-02
# 9  1 2 3 2017-01-03
# 10 1 2 3 2017-01-03
# 11 4 5 6 2017-01-03
# 12 4 5 6 2017-01-03

这稍微更为通用,如果您需要添加多个列而不是仅添加一个向量,这将非常有用。