插入R中缺失数据的行-数量为0

插入R中缺失数据的行-数量为0,r,R,原始数据 Person month Year Quantity A 02 2018 900 A 04 2018 600 A 09 2018 300 A 04 2019 40 B 06 2018 56 B 01 2019 10 B 09 2019 20 所需输出 Person month Year Quantity A

原始数据

Person   month   Year Quantity
A         02  2018   900
A         04  2018   600
A         09  2018   300
A         04  2019   40
B         06  2018   56
B         01  2019   10
B         09  2019   20
所需输出

Person   month   Year Quantity
A         01  2018   0
A         02  2018   900
A         03  2018   0
A         04  2018   600
A         05  2018   0
A         06  2018   0
A         07  2018   0
A         08  2018   0
A         09  2018   300
A         10  2018   0
A         11  2018   0
A         12  2018   0
A         01  2019   0
A         01  2019   0
A         02  2019   0
A         03  2019   0
A         04  2019   40
A         05  2019   0
A         06  2019   0
A         07  2019   0
A         08  2019   0
A         09  2019   0
A         10  2019   0
A         11  2019   0
A         12  2019   0
B         01  2018   0
B         02  2018   0
B         03  2018   0
B         04  2018   0
B         05  2018   0
B         06  2018   56
B         07  2018   0
B         08  2018   0
B         09  2018   0
B         10  2018   0
B         11  2018   0
B         12  2018   0
B         01  2019   10
B         02  2019   0
B         03  2019   0
B         04  2019   0
B         05  2019   0
B         06  2019   0
B         07  2019   0
B         08  2019   0
B         09  2019   20
B         10  2019   0
B         11  2019   0
B         12  2019   0
大家好,

我在R数据框中有上面的样本数据,我想为每个月添加0个“数量”,其中“人”的数据缺失。我已经丢失了月份和年份,正如你们所看到的,我希望为每个人插入我的数据框。i、 e.为缺少的月份,将个人需求的月-年值0相加。(为了提供一些背景信息,我拥有的初始数据有每个需求的日期,但我将其分组为月份和年份,因为我从日期字段中提取了月份和年份值,如下所示

PersonMonthDemand <-
  DateData %>%
  mutate(month = month(DateOfDemand))%>%
  mutate(year= year(DateOfDemand))%>%
  group_by(Person, month, year) %>%
  summarise(Quantity = sum(Quantity)) 
PersonMonthDemand%
突变(月=月(需求日期))%>%
突变(年=年(需求日期))%>%
分组依据(人、月、年)%>%
汇总(数量=总和(数量))
由此产生的原始数据(如上所示)


如果这里的专家能帮忙,我们将不胜感激。提前谢谢。亲切问候,加亚特里

我们可以使用
tidyr中的
complete

library(tidyr)
library(dplyr)
df1 %>%
    complete(Person, month = 1:12, Year, fill = list(Quantity = 0)) %>% 
    arrange(Person, Year)
# A tibble: 48 x 4
#  Person month  Year Quantity
#   <chr>  <int> <int>    <dbl>
# 1 A          1  2018        0
# 2 A          2  2018      900
# 3 A          3  2018        0
# 4 A          4  2018      600
# 5 A          5  2018        0
# 6 A          6  2018        0
# 7 A          7  2018        0
# 8 A          8  2018        0
# 9 A          9  2018      300
#10 A         10  2018        0
# … with 38 more rows
library(tidyr)
图书馆(dplyr)
df1%>%
完成(人,月=1:12,年,填写=清单(数量=0))%>%
安排(人、年)
#A tibble:48 x 4
#人月年数量
#          
#1A 2018 0
#2 A 2 2018 900
#3 A 3 2018 0
#4 A 4 2018 600
#5 A 5 2018 0
#6 A 6 2018 0
#7 A 7 2018 0
#8 A 8 2018 0
#9 A 9 2018 300
#10 A 10 2018 0
#…还有38行
###资料


df1创建左侧基准表

为此,请采用所有客户的独特价值观:

cstmr<-data.frame(unique(orgn_data$Person))
change column names
names(cstmr)[1]<-'Person'
然后使用以下命令将所有NAs替换为0:

final_df[is.na(final_df)] <- 0

final_df[is.na(final_df)]非常感谢Arun博士,非常感谢您这么快的回复。代码可以工作,但不幸的是部分工作。对不起,我没有完全解释我的问题。对于“C2”人员,非零值在2018年存在1个月或2个月,但2019年和2020年没有。但是,对于“C”人员,我希望2019年和2020年的所有月份(截至本月)也要填充Quanity 0。目前,您帮助的代码在全年所有月份都会填充,但仅在2018年,因为这是Pesron C唯一出现需求量的一年。啊,太棒了!谢谢Jeremy和Hemant,这非常好。这是很棒的东西,我也学到了。非常感谢。Tha谢谢你,杰里米。我是新来的,所以编辑很有帮助!
orgn_data_year_mnth<-unique(orgn_data[c("month", "Year")])
cross join cstmr & organ_data_year_mnth using
cc<-merge(cstmr, organ_data_year_mnth)
final_df<-merge(cc,orgn_data,by=c('Person','month','Year'),all.x=TRUE)
final_df[is.na(final_df)] <- 0