首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用循环根据R中的子集数据计算相关性

使用循环根据R中的子集数据计算相关性
EN

Stack Overflow用户
提问于 2019-08-12 22:44:46
回答 2查看 151关注 0票数 0

我有一个大型数据集,在一列中有几种产品,以及每种产品的信息,包括前几年的单位零售和每周数量。我正在尝试编写一个for循环,该循环按产品名称对数据进行子集,并为每个产品的行数计算单位零售和数量之间的相关性。

我已经能够根据产品对数据进行子集并计算相关性,但有很多产品,实现一个循环来遍历每个唯一的产品会更有好处。

数据集示例:

代码语言:javascript
复制
`Category Label` `Fiscal Year`     `Fiscal Week`               `Net Sales` `Extended Quantity`    `Unit Retail`         `Log QTY`            `Log Retail`
   <chr>             <chr>             <chr>                        <dbl>             <dbl>            <dbl>           <dbl>            <dbl>
 1 LOOSE CITRUS      FY2018            FY2018-P01-W1              170833.           204901.            0.834            12.2           -0.182
 2 LOOSE CITRUS      FY2018            FY2018-P01-W2              158609.           187650.            0.845            12.1           -0.168
 3 LOOSE CITRUS      FY2018            FY2018-P01-W3              163580.           196313.            0.833            12.2           -0.182
 4 LOOSE CITRUS      FY2018            FY2018-P01-W4              146240.           185984.            0.786            12.1           -0.240
 5 LOOSE CITRUS      FY2018            FY2018-P02-W1              147494.           171036.            0.862            12.0           -0.148
 6 LOOSE ONIONS      FY2018            FY2018-P01-W1               88802.            78446.             1.13            11.3            0.124
 7 LOOSE ONIONS      FY2018            FY2018-P01-W2               77365.            66898.             1.16            11.1            0.145
 8 LOOSE ONIONS      FY2018            FY2018-P01-W3               88026.            75055.             1.17            11.2            0.159
 9 LOOSE ONIONS      FY2018            FY2018-P01-W4              114720.            97051.             1.18            11.5            0.167
10 LOOSE ONIONS      FY2018            FY2018-P02-W1               95746.            82128.             1.17            11.3            0.153
代码语言:javascript
复制
#subset data into own df based on category
allProduce_split <- split(allProduce, allProduce$`Category Label`)

#correlation
cor_produce <- cor(allProduce_split$LOOSE CITRUS$`Unit Retail`, 
                   allProduce_split$LOOSE CITRUS$`Extended Quantity`)

不只是返回示例中“散装的CITRUS”产品的相关性,我希望有一个表,其中包含每个产品名称的单行,以及所有5个会计周的单位零售和数量之间的相关性。例如:

代码语言:javascript
复制
'Category Label'     'Cor'
LOOSE CITRUS          .5363807
LOOSE ONIONS          .6415218
product C             .6498723
Product D             -.451258
Product E             .0012548
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-12 23:18:20

考虑一下by,它类似于split,但是允许使用第三个参数在子集上应用任何函数。在您的示例中,您的函数可以构建产品标签和关联结果的数据框架:

代码语言:javascript
复制
df_list <- by(allProduce, allProduce$`Category Label`, function(sub)
    data.frame(product = sub$Category_Label[1],
               cor_produce = cor(sub$`Unit Retail`,
                                 sub$`Extended Quantity`)
               )
)

final_df <- do.call(rbind, unname(df_list))

或者,您仍然可以使用split,但随后可以运行lapply

代码语言:javascript
复制
allProduce_split <- split(allProduce, allProduce$`Category Label`)

df_list <- lapply(allProduce_split, function(sub)
    data.frame(product = sub$Category_Label[1],
               cor_produce = cor(sub$`Unit Retail`,
                                 sub$`Extended Quantity`)
               )
)

final_df <- do.call(rbind, unname(df_list))
票数 0
EN

Stack Overflow用户

发布于 2019-08-12 22:59:10

尝试:

代码语言:javascript
复制
library(dplyr)



   df <-allProduce %>% group_by(Category Label) %>% mutate(correlation = cor(Unit Retail,Extended Quantity))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57463379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档