【问题标题】:Restructure data (which is in multiple data frames already) into different multiple data frames in R将数据(已经在多个数据帧中)重组为 R 中不同的多个数据帧
【发布时间】:2018-12-28 17:39:21
【问题描述】:

我是 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

谁能告诉我如何重组我的数据?

【问题讨论】:

  • df &lt;- do.call(rbind, l.df) 应该将列表中的所有数据框组合成一个数据框。
  • 然后您可以使用aggregate 对特定组执行功能。

标签: r dataframe reshape


【解决方案1】:

也许你可以试试下面:

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));

【讨论】:

    【解决方案2】:

    例如,您可以如何为按shopId 分组的给定商店执行mean

     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
    

    【讨论】:

      猜你喜欢
      • 2020-12-18
      • 2020-12-14
      • 2018-12-14
      • 2013-11-16
      相关资源
      最近更新 更多