如何将 rpivotTable 结果转换为数据框
How to convert rpivotTable result in to dataframe
如何将 rpivotTable 结果转换为数据帧。
我想用 rpivotTable 的结果创建新的 datafrmae,
可以用 R 做吗?
数据集喜欢
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
library(rpivotTable)
rpivotTable(
inventory,
aggregatorName = "Count",
cols = "Order_Bin",
rows = "User",
rendererName = "Heatmap",
width = "100%",
height = "1000px")
根据 rpivotTable
的文档,没有导出工具。
所以,你必须自己聚合。一种可能是
reshape2::dcast(inventory, User ~ Order_Bin, length, margins = TRUE)
哪个returns
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()
调用的输出:
请记下总计行和列。
数据框连同行和列变量名称以及聚合器名称一起存储在列表中。
library(rpivotTable)
pv <- rpivotTable(
df,
aggregatorName = "Count",
cols = "Order_Bin",
rows = "User",
rendererName = "Heatmap",
width = "100%",
height = "1000px")
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. ...
此信息随后可用于创建您要求包含数据透视表的结果的数据框:
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))
# 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
编辑:
要获取行百分比:
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))
# 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
如何将 rpivotTable 结果转换为数据帧。 我想用 rpivotTable 的结果创建新的 datafrmae,
可以用 R 做吗?
数据集喜欢
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
library(rpivotTable)
rpivotTable(
inventory,
aggregatorName = "Count",
cols = "Order_Bin",
rows = "User",
rendererName = "Heatmap",
width = "100%",
height = "1000px")
根据 rpivotTable
的文档,没有导出工具。
所以,你必须自己聚合。一种可能是
reshape2::dcast(inventory, User ~ Order_Bin, length, margins = TRUE)
哪个returns
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()
调用的输出:
请记下总计行和列。
数据框连同行和列变量名称以及聚合器名称一起存储在列表中。
library(rpivotTable)
pv <- rpivotTable(
df,
aggregatorName = "Count",
cols = "Order_Bin",
rows = "User",
rendererName = "Heatmap",
width = "100%",
height = "1000px")
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. ...
此信息随后可用于创建您要求包含数据透视表的结果的数据框:
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))
# 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
编辑: 要获取行百分比:
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))
# 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