首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将rpivotTable结果转换为数据格式

如何将rpivotTable结果转换为数据格式
EN

Stack Overflow用户
提问于 2020-03-05 11:28:44
回答 2查看 548关注 0票数 0

如何将rpivotTable结果转换为数据格式。我想要用rpivotTable的结果来创建新的数据仓库,

在R中可以做吗?

数据集

代码语言:javascript
复制
User     Order_Bin
a          PPL
b          CCD
c          CCD
d          OLP
a          OLP
c          PPL
b          OLP
a          PPL
a          OLP
b          PPL
c          CCD
d          CCD
d          OLP
c          OLP
b          OLP
b          CCD

如何作为data.frame获得以下代码的结果

代码语言:javascript
复制
library(rpivotTable)
rpivotTable(
  inventory,
  aggregatorName = "Count",
  cols = "Order_Bin",
  rows = "User",
  rendererName = "Heatmap",
  width = "100%",
  height = "1000px")
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-05 11:46:10

根据rpivotTable的文件,没有出口设施。

所以,你必须自己聚集起来。一种可能是

代码语言:javascript
复制
reshape2::dcast(inventory, User ~ Order_Bin, length, margins = TRUE)

回传

User CCD OLP PPL (all) 1 a 0 2 2 4 2 b 2 2 1 5 3 c 2 1 1 4 4 d 1 2 0 3 5 (all) 5 7 4 16

为了进行比较,下面是pivotTable()调用的输出:

请注意总数行和列。

票数 1
EN

Stack Overflow用户

发布于 2020-03-05 11:51:03

数据帧与行和col变量名以及aggregatorName一起存储在列表中。

代码语言:javascript
复制
library(rpivotTable)
pv <- rpivotTable(
  df,
  aggregatorName = "Count",
  cols = "Order_Bin",
  rows = "User",
  rendererName = "Heatmap",
  width = "100%",
  height = "1000px")

代码语言:javascript
复制
class(pv)
str(pv)
List of 8
 $ x            :List of 4
  ..$ data     :'data.frame':   16 obs. of  2 variables:
  .. ..$ User     : chr [1:16] "a" "b" "c" "d" ...
  .. ..$ Order_Bin: chr [1:16] "PPL" "CCD" "CCD" "OLP" ...
  ..$ params   :List of 4
  .. ..$ rows          :List of 1
  .. .. ..$ : chr "User"
  .. ..$ cols          :List of 1
  .. .. ..$ : chr "Order_Bin"
  .. ..$ aggregatorName:List of 1
  .. .. ..$ : chr "Count"  # etc. ...

然后,可以使用这些信息创建数据帧,其中包含pivotTable的结果

代码语言:javascript
复制
pv$x$data %>%
  group_by(Order_Bin, User) %>%
  count() %>% 
  pivot_wider(id_cols=User, names_from=Order_Bin, values_from=n, 
              values_fill=list(n=0))

代码语言:javascript
复制
# A tibble: 4 x 4
  User    CCD   OLP   PPL
  <chr> <int> <int> <int>
1 b         2     2     1
2 c         2     1     1
3 d         1     2     0
4 a         0     2     2

编辑:若要获取行百分比:

代码语言:javascript
复制
pv$x$data %>%
  group_by(Order_Bin, User) %>%
  count() %>% 
  group_by(User) %>%
  mutate(n=n/sum(n)) %>%
  pivot_wider(id_cols=User, names_from=Order_Bin, values_from=n, 
              values_fill=list(n=0))

代码语言:javascript
复制
# A tibble: 4 x 4
# Groups:   User [4]
  User    CCD   OLP   PPL
  <chr> <dbl> <dbl> <dbl>
1 b     0.4   0.4    0.2 
2 c     0.5   0.25   0.25
3 d     0.333 0.667  0   
4 a     0     0.5    0.5
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60544369

复制
相关文章

相似问题

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