我是R的新手,在寻找一种方法来重组数据时遇到了麻烦。
目前,我有365个不同的数据框,每个数据框代表一年中的某一天。在每个数据框中都有销售点数据,因此每天在每个商店出售多少产品。每个数据帧中有四列;即ShopId,ArticleId,Date(在一个数据帧中恒定)和AmountSold。
现在,我想重组我的数据框,以便能够预测每个商店每天每种产品需要多少物品。我想通过将对应于某个商店(ShopId)的所有数据点聚类,或通过将对应于某个产品(ArticleId)的所有数据点聚类在单独的数据帧中来做到这一点。问题是我不知道该怎么做。我已经有了所有数据帧的列表,编码如下:
l.df <- lapply(ls(), function(x) if (class(get(x)) == "data.frame") get(x))
我还列出了数据框中出现的所有ArticleId:
AllArticleId
,以及在数据框中出现的所有ShopId的列表:AllShopId
。
谁能告诉我如何重组数据?
答案 0 :(得分:0)
也许您可以尝试以下操作:
library(dplyr);
file_names <- dir() # Location of individual sales files
agg_df <- do.call(rbind,lapply(file_names,read.csv))
# Median sale per Article ID
agg_df = agg_df %>% group_by(ArticleID) %>%
mutate(mSlByArtId = median(AmountSold));
# Median sale per Shop ID
agg_df = agg_df %>% group_by(ShopID) %>%
mutate(mSlByShpId = median(AmountSold));
答案 1 :(得分:0)
例如,在这里,您可以针对由mean
分组的给定商店执行shopId
:
dl <- list()
dl[[1]] <- data.frame(
shopId = rep(1:4, each = 2),
ArticleId = c(1, 1, 3, 2, 3, 2, 1, 2),
date = 1:8,
AmountSoled = 5
)
dl[[2]] <- data.frame(
shopId = rep(1:4, each = 2),
ArticleId = c(2, 1, 3, 2, 4, 4, 3, 1),
date = 1:8,
AmountSoled = 5
)
# dl
# [[1]]
# shopId ArticleId date AmountSoled
# 1 1 1 1 5
# 2 1 1 2 5
# 3 2 3 3 5
# 4 2 2 4 5
# 5 3 3 5 5
# 6 3 2 6 5
# 7 4 1 7 5
# 8 4 2 8 5
#
# [[2]]
# shopId ArticleId date AmountSoled
# 1 1 2 1 5
# 2 1 1 2 5
# 3 2 3 3 5
# 4 2 2 4 5
# 5 3 4 5 5
# 6 3 4 6 5
# 7 4 3 7 5
# 8 4 1 8 5
df <- do.call(rbind, dl)
df
# shopId ArticleId date AmountSoled
# 1 1 1 1 5
# 2 1 1 2 5
# 3 2 3 3 5
# 4 2 2 4 5
# 5 3 3 5 5
# 6 3 2 6 5
# 7 4 1 7 5
# 8 4 2 8 5
# 9 1 2 1 5
# 10 1 1 2 5
# 11 2 3 3 5
# 12 2 2 4 5
# 13 3 4 5 5
# 14 3 4 6 5
# 15 4 3 7 5
# 16 4 1 8 5
aggregate(df, by = list(df$shopId), mean)
# Group.1 shopId ArticleId date AmountSoled
# 1 1 1 1.25 1.5 5
# 2 2 2 2.50 3.5 5
# 3 3 3 3.25 5.5 5
# 4 4 4 1.75 7.5 5