在第二天在R中添加行,在每列中添加0

时间:2015-11-02 18:07:33

标签: r

我有一个包含4列的data.frame。第一列是the_day,从2015年1月11日到2015年11月30日。根据{{​​1}},接下来的3个值对应于每一天。但是,有些日期丢失了,因为接下来的3列中没有值(没有筹集资金)。

例如,缺少11/3/15。我想要做的是在11/2/15和11/4/15之间添加一行日期,并在接下来的3列中添加零。所以它会是这样的:

amount_raised

我是否必须创建一个向量,然后将其添加到现有的11/3/2015 0 0 0 中?我觉得必须有一个更快的方法。

2 个答案:

答案 0 :(得分:0)

data.frames无法在内部按行进行排序。我会建议以下几点:

  1. 创建空(零)30x3矩阵。这将包括您的amount_raised。
  2. 创建一个完整的日期序列,从11/1到11/30
  3. 对于每个现有日期,在完整序列中找到它匹配
  4. 将数据框中的相应行复制到矩阵中的匹配行(使用match()函数)。
  5. 最后,从新的序列和矩阵中创建一个新的数据框。

答案 1 :(得分:0)

这应该有效,

date_seq <- seq(min(df$the_day),max(df$the_day),by = 1)
rbind(df,cbind(the_day = as.character( date_seq[!date_seq %in% df$the_day]), inf = "0", specified = "0", both = "0"))

#   the_day  inf specified   both
# 1 2015-11-02 1.32       156 157.32  
# 2 2015-11-04 4.25        40  44.25
# 3 2015-11-05 3.25        25  28.25
# 4 2015-11-06    1        15     16
# 5 2015-11-07 4.75        10  14.75
# 6 2015-11-08   32         0     32
# 7 2015-11-03    0         0      0

如果您想根据the_day对其进行排序,请将数据框放在变量中并使用order函数

ans <- rbind(df,cbind(the_day = as.character( date_seq[!date_seq %in% df$the_day]), inf = "0", specified = "0", both = "0"))
ans[order(ans$the_day), ]

#   the_day  inf specified   both
# 1 2015-11-02 1.32       156 157.32 
# 7 2015-11-03    0         0      0
# 2 2015-11-04 4.25        40  44.25
# 3 2015-11-05 3.25        25  28.25
# 4 2015-11-06    1        15     16
# 5 2015-11-07 4.75        10  14.75
# 6 2015-11-08   32         0     32