我是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
我感谢任何帮助!
答案 0 :(得分:3)
要复制问题中的内容,我们首先要创建数据:
df = data.frame(a = c(1,1,4,4), b = c(2,2,5,5), c = c(3,3,6,6))
您为字符串的每个值复制数据,其中包含值1/1
,1/2
,1/3
和1/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
这稍微更为通用,如果您需要添加多个列而不是仅添加一个向量,这将非常有用。