插入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