R - 带小计的数据透视表 table
R - Pivot table with subtotals
如何在 R 中获取带小计的数据透视表(如 MS Excel 数据透视表)?
我正在使用 reshape2
包中的 dcast
在 R 中创建数据透视表。我还使用 rowSums
和 colSums
进行了总计。我承认我不明白 dcast
参数集中的复杂性。我只知道如何创建枢轴,帮助文件让我头疼。 如果有人可以使用 dcast
解决这个问题(我怀疑它可以解决所有问题),并解释解决方案所需的参数,那将非常有帮助。
我正在使用此代码(C2 有两个因子,X1 和 X2):
PIV <- dcast(DF, C1~C2, value.var="C3", sum)
我不明白所有这些边距、子集、填充或下降的作用。帮助文件似乎过于晦涩,我在互联网上也没有得到太多帮助。
样本数据透视表(无小计,T 为总计):
C1 X1 X2 T
a 12 1 13
a 14 2 16
b 16 3 19
b 11 4 15
b 8 5 13
T 61 15 76
样本预期枢轴(带小计 t,T 为总计)
C1 X1 X2 T
a 12 1 13
a 14 2 16
ta 26 3 29
b 16 3 19
b 11 4 15
b 8 5 13
tb 35 12 47
T 61 15 76
假设您一开始没有任何总数,像这样:
mydf <- structure(list(C1 = c("a", "a", "b", "b", "b"), X1 = c(12L, 14L,
16L, 11L, 8L), X2 = 1:5), .Names = c("C1", "X1", "X2"), row.names = c(NA,
5L), class = "data.frame")
mydf
## C1 X1 X2
## 1 a 12 1
## 2 a 14 2
## 3 b 16 3
## 4 b 11 4
## 5 b 8 5
那么您必须使用 margins
参数来获取 dcast
的输出结果。
library(reshape2)
mydfl <- melt(mydf)
mydfl$ind <- with(mydfl, ave(C1, C1, variable, FUN = seq_along))
dcast(mydfl, C1 + ind ~ variable, sum,
margins = c("C1", "ind", "variable"))
# C1 ind X1 X2 (all)
# 1 a 1 12 1 13
# 2 a 2 14 2 16
# 3 a (all) 26 3 29
# 4 b 1 16 3 19
# 5 b 2 11 4 15
# 6 b 3 8 5 13
# 7 b (all) 35 12 47
# 8 (all) (all) 61 15 76
"margins" 参数用于获取小计。在这里,我们根据 "C1"(总计)和 "ind" 变量(小计)进行小计,我们还添加行总计(使用 "variable")。
就是说,我不确定我是否会推荐这个,因为您在同一个 table 中混合了数据和分析。
如何在 R 中获取带小计的数据透视表(如 MS Excel 数据透视表)?
我正在使用 reshape2
包中的 dcast
在 R 中创建数据透视表。我还使用 rowSums
和 colSums
进行了总计。我承认我不明白 dcast
参数集中的复杂性。我只知道如何创建枢轴,帮助文件让我头疼。 如果有人可以使用 dcast
解决这个问题(我怀疑它可以解决所有问题),并解释解决方案所需的参数,那将非常有帮助。
我正在使用此代码(C2 有两个因子,X1 和 X2):
PIV <- dcast(DF, C1~C2, value.var="C3", sum)
我不明白所有这些边距、子集、填充或下降的作用。帮助文件似乎过于晦涩,我在互联网上也没有得到太多帮助。
样本数据透视表(无小计,T 为总计):
C1 X1 X2 T
a 12 1 13
a 14 2 16
b 16 3 19
b 11 4 15
b 8 5 13
T 61 15 76
样本预期枢轴(带小计 t,T 为总计)
C1 X1 X2 T
a 12 1 13
a 14 2 16
ta 26 3 29
b 16 3 19
b 11 4 15
b 8 5 13
tb 35 12 47
T 61 15 76
假设您一开始没有任何总数,像这样:
mydf <- structure(list(C1 = c("a", "a", "b", "b", "b"), X1 = c(12L, 14L,
16L, 11L, 8L), X2 = 1:5), .Names = c("C1", "X1", "X2"), row.names = c(NA,
5L), class = "data.frame")
mydf
## C1 X1 X2
## 1 a 12 1
## 2 a 14 2
## 3 b 16 3
## 4 b 11 4
## 5 b 8 5
那么您必须使用 margins
参数来获取 dcast
的输出结果。
library(reshape2)
mydfl <- melt(mydf)
mydfl$ind <- with(mydfl, ave(C1, C1, variable, FUN = seq_along))
dcast(mydfl, C1 + ind ~ variable, sum,
margins = c("C1", "ind", "variable"))
# C1 ind X1 X2 (all)
# 1 a 1 12 1 13
# 2 a 2 14 2 16
# 3 a (all) 26 3 29
# 4 b 1 16 3 19
# 5 b 2 11 4 15
# 6 b 3 8 5 13
# 7 b (all) 35 12 47
# 8 (all) (all) 61 15 76
"margins" 参数用于获取小计。在这里,我们根据 "C1"(总计)和 "ind" 变量(小计)进行小计,我们还添加行总计(使用 "variable")。
就是说,我不确定我是否会推荐这个,因为您在同一个 table 中混合了数据和分析。