问题描述
我确实有一个问题,我似乎无法有效解决。
说我的循环的结果如下(组成)。
library(tidyverse)
mytib <- tribble(
~year,~month,~shop_id,~inventory,2019,01,"A",200,"B",300,"C",240,05,250,400,"D",08,11,"E",)
也就是说,我只得到 1 月、5 月、8 月和 11 月的结果(因为数据仅适用于这些日期)。不过,我想发扬值二月,三月,六月(那些会得到一月值。六月和七月将获得从五月等的值。因为R不,我不能用“填充”, “知道”有二月、三月……等等(我不能把这几个月“变异”成“mytib”。)
我想出了一个解决方案,但不幸的是,它非常低效且容易出错。解决方案(用文字表示)如下:创建一个包含从 1:12 开始的月份的网格,以及所有唯一的 shop_id(参见下面的代码),然后使用我在 1 月、5 月、8 月和 11 月观察到的商店创建单独的向量。>
然后按月份和年份分组_拆分网格(到列表中)。然后将所有独特的 shopid 减少到我观察到的那些。将它们全部连接起来(使用 dplyr::join_all),然后将原始 tibble 左连接到缩小的网格,最后结转 (.direction="down") 观察到的值,这样我最终会得到一个 tibbe “result”,这就是我想要的。
虽然我达到了我想要的目标,但我想知道是否有比我笨拙的方法更有效且更不容易出错的解决方案。非常感谢任何帮助或提示。
附言。请不要对我太苛刻,因为我对 R 还是很陌生。
完整代码如下:
mytib <- tribble(
~year,)
grid <- expand.grid(year = 2019,month = 1:12,shop_id = unique(mytib$shop_id))
grid
jan2019 <- mytib %>% filter(year == 2019 & month ==01)
jan2019 <- jan2019$shop_id
may2019 <- mytib %>% filter(year == 2019 & month == 05)
may2019 <- may2019$shop_id
aug2019 <- mytib %>% filter(year == 2019 & month == 08)
aug2019 <-aug2019$shop_id
nov2019 <- mytib %>% filter(year == 2019 & month == 11)
nov2019 <- nov2019$shop_id
my_list <- grid %>% group_by(year,month) %>% group_split()
my_list
my_list[[1]] <- my_list[[1]][my_list[[1]]$shop_id %in% jan2019,] ; my_list[[1]]
my_list[[2]] <- my_list[[2]][my_list[[2]]$shop_id %in% jan2019,] ; my_list[[2]]
my_list[[3]] <- my_list[[3]][my_list[[3]]$shop_id %in% jan2019,] ; my_list[[3]]
my_list[[4]] <- my_list[[4]][my_list[[4]]$shop_id %in% jan2019,] ; my_list[[4]]
my_list[[5]] <- my_list[[5]][my_list[[5]]$shop_id %in% may2019,] ; my_list[[5]]
my_list[[6]] <- my_list[[6]][my_list[[6]]$shop_id %in% may2019,] ; my_list[[6]]
my_list[[7]] <- my_list[[7]][my_list[[7]]$shop_id %in% may2019,] ; my_list[[7]]
my_list[[8]] <- my_list[[8]][my_list[[8]]$shop_id %in% aug2019,] ; my_list[[8]]
my_list[[9]] <- my_list[[9]][my_list[[9]]$shop_id %in% aug2019,] ; my_list[[9]]
my_list[[10]]<- my_list[[10]][my_list[[10]]$shop_id %in% aug2019,];my_list[[10]]
my_list[[11]]<- my_list[[11]][my_list[[11]]$shop_id %in% nov2019,];my_list[[11]]
my_list[[12]]<- my_list[[12]][my_list[[12]]$shop_id %in% nov2019,];my_list[[12]]
result <- plyr::join_all(my_list,type="full")
result
result <- left_join(result,mytib,by=c("year","month","shop_id"))
result %>% group_by(shop_id) %>% fill(inventory,.direction = "down") %>% print(n=35)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)