用 R 编程语言创建 OLAP 多维数据集

Posted

技术标签:

【中文标题】用 R 编程语言创建 OLAP 多维数据集【英文标题】:create OLAP cube in R programming language 【发布时间】:2017-08-17 10:21:40 【问题描述】:

您好,我有以下数据

  Function    SB `Country Region` `+1 Function` `+1 SB` `+1 Country Region`
     <chr> <chr>            <chr>         <chr>   <chr>               <chr>
1      ENG  SB10             AMER           ENG    SB10                AMER
2       IT  SB07             EMEA            IT    SB07                EMEA
3      QLT  SB05             EMEA           QLT    SB05                EMEA
4      MFG  SB07             EMEA           MFG    SB07                EMEA
5      MFG  SB04             EMEA           MFG    SB05                EMEA
6      SCM  SB08             EMEA           SCM    SB08                EMEA

我想创建 3 维 OLAP 多维数据集,其中列 Function SB Country Region 应位于行中,+1 Function,+1 SB,+1 Country Region 应位于列中。

输出应为以下格式

                   `+1 Function` `+1 SB` `+1 Country Region`  
Function
SB 
Country Region

谢谢你

添加精确的 RpivotTable 输出。

【问题讨论】:

你能直接显示所需的输出,而不仅仅是它的格式吗? 添加精确的 RpivotTable 输出。 i.stack.imgur.com/y1y1I.png 您能否确认您使用的代码是rpivotTable::rpivotTable(df, rows = c("Function", "SB", "Country Region"), cols = c("+1 Function", "+1 SB", "+1 Country Region")),如果是,请编辑您的问题以包含它? 【参考方案1】:

例如,您可以使用ftable()

df <- read.table(text =
"  Function    SB 'Country Region' '+1 Function' '+1 SB' '+1 Country Region'
       ENG  SB10             AMER           ENG    SB10                AMER
        IT  SB07             EMEA            IT    SB07                EMEA
       QLT  SB05             EMEA           QLT    SB05                EMEA
       MFG  SB07             EMEA           MFG    SB07                EMEA
       MFG  SB04             EMEA           MFG    SB05                EMEA
       SCM  SB08             EMEA           SCM    SB08                EMEA",
  stringsAsFactors = FALSE, header = TRUE, check.names = FALSE)

foo <- ftable(df, row.vars = c(3, 1, 2), col.vars = c(6, 4, 5))

as.matrix(foo)[apply(foo, 1, function(x) any(x != 0)), apply(foo, 2, function(x) any(x != 0))]
# Or simply:
as.matrix(foo)[apply(foo, 1, any), apply(foo, 2, any)]

#                           +1 Country Region_+1 Function_+1 SB
# Country Region_Function_SB AMER_ENG_SB10 EMEA_IT_SB07 EMEA_MFG_SB05 EMEA_MFG_SB07 EMEA_QLT_SB05 EMEA_SCM_SB08
#              AMER_ENG_SB10             1            0             0             0             0             0
#              EMEA_IT_SB07              0            1             0             0             0             0
#              EMEA_MFG_SB04             0            0             1             0             0             0
#              EMEA_MFG_SB07             0            0             0             1             0             0
#              EMEA_QLT_SB05             0            0             0             0             1             0
#              EMEA_SCM_SB08             0            0             0             0             0             1

rpivotTable::rpivotTable(df, rows = c("Country Region", "Function", "SB"), cols = c("+1 Country Region", "+1 Function", "+1 SB"))比较:

【讨论】:

感谢 Aurèle 这适用于示例,但是当我将其应用于完整数据时,我错过了一些组合。我想要行和列的所有组合以及它们在数据中找不到匹配项的位置,它应该给我零(0)......你能帮我吗 那只是foo你想要的吗? 确实如此。 没什么。 foo 应该已经在您的工作区中,如果您已经运行它的话。只需再次输入foo,然后在命令行按Enter即可打印 感谢您的宝贵意见,我刚刚看到 foo 输出,它给了我频率,现在我想要矩阵,您能帮我吗

以上是关于用 R 编程语言创建 OLAP 多维数据集的主要内容,如果未能解决你的问题,请参考以下文章

Kylin - 查询 Hbase 上的 OLAP 多维数据集?

如何为 OLAP 多维数据集部署 Oracle 维度表

Analysis Services 2005 OLAP 多维数据集:我可以在 nvarchar 列上创建不同的计数度量吗?

如何将业务逻辑编程到 OLAP Cube 中?

OLAP 多维数据集在 SAS 9.2 中获得递增的文件夹名称

OLAP 多维数据集 - PHP 和 MongoDB