将日期列添加到数据框

Mr.*_*oge 2 r date

我对 R 相当陌生,我正在尝试创建一个循环以在我的数据框中添加日期列,该列按天增加到设定的日期。

我的数据如下所示:

'A'  'B'  'C'
 1    2    3
 1    2    3
 4    5    6
 4    5    6
Run Code Online (Sandbox Code Playgroud)

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

'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
Run Code Online (Sandbox Code Playgroud)

我感谢任何帮助!

Gre*_*gor 7

要复制您的问题,我们将首先创建您的数据:

df = data.frame(a = c(1,1,4,4), b = c(2,2,5,5), c = c(3,3,6,6))
Run Code Online (Sandbox Code Playgroud)

您复制您的数据串的每一个值,即呈现值1/11/21/31/4

# construct the values
values = paste("1", 1:4, sep = "/")
Run Code Online (Sandbox Code Playgroud)

如果我们将这些值每个重复 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
Run Code Online (Sandbox Code Playgroud)

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

使用Date类对象

如果你想要类的日期Date,它们可以用 来创建as.Date,并且seq可以用来创建一个Dates的序列。通过修改values上面的定义,我们可以使用Dateclass 来代替,其余代码保持不变。

values = seq(from = as.Date("2017-01-01"), to = as.Date("2017-01-03"), by = 'day')
Run Code Online (Sandbox Code Playgroud)

使用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
Run Code Online (Sandbox Code Playgroud)

这有点通用,如果您需要添加多列而不是单个向量,这将很有用。