在R中添加缺少的行

时间:2015-03-10 05:39:27

标签: r

我在R中有一个表格如下

 month  day total
1   1    3   1414
2   1    5   1070
3   1    6    211
4   1    7   2214
5   1    8   1766
6   1   13   2486
7   1   14     43
8   1   15   2349
9   1   16   4616
10  1   17   2432
11  1   18   1482
12  1   19    694
13  1   20    968
14  1   23    381
15  1   24    390
16  1   26   4063
17  1   27   3323
18  1   28    988
19  1   29   9671
20  1   30  11968

我必须将缺少的天数(例如1,2,4)添加到零,以便结果应该像

 month  day total
-   1    1   0
-   1    2   0
    1    3   1414
    1    4    0
2   1    5   1070
3   1    6    211
4   1    7   2214
5   1    8   1766
    1    9    0
    1   10    0
    1   11    0
    1   12    0
6   1   13   2486
7   1   14     43
8   1   15   2349
9   1   16   4616
10  1   17   2432
11  1   18   1482
12  1   19    694
13  1   20    968
    1   21     0
    1   22     0
14  1   23    381
15  1   24    390
    1   25     0
16  1   26   4063
17  1   27   3323
18  1   28    988
19  1   29   9671
20  1   30  11968

2 个答案:

答案 0 :(得分:1)

只使用基数R,你可以这样做:

for(d in 1:31) {
  if(!d %in% my.df$day) 
    my.df[nrow(my.df) + 1,] <- c(1,d,0)
}

# Reorder rows
my.df <- my.df[with(my.df, order(month, day)),]
rownames(my.df) <- NULL

# Check the results
head(my.df)

#  month day total
# 1     1   1     0
# 2     1   2     0
# 3     1   3  1414
# 4     1   4     0
# 5     1   5  1070
# 6     1   6   211

答案 1 :(得分:0)

R中,我们可以创建一个新的数据集,其中包含&#39; day&#39;从1:30和&#39;列&#39; as&#39; 1&#39;,left_join包含原始数据集,replace NA值与&#39; 0&#39;

合并后
 df2 <- data.frame(month=1, day=1:30)
 library(dplyr)
 left_join(df2, df1) %>% 
              mutate(total=replace(total, which(is.na(total)),0))

或者使用merge中的base R来获取&#39; dM&#39;并在&#39;总计&#39;中分配NA值到&#39; 0&#39;

  dM <- merge(df1, df2, all.y=TRUE)
  dM$total[is.na(dM$total)] <- 0