R - 带小计的数据透视表

标签 r reshape2 dcast

如何在 R 中获取带有小计的数据透视表(如 MS Excel 数据透视表)?

我正在使用 reshape2 包中的 dcast 在 R 中创建数据透视表。我还使用 rowSumscolSums 进行总计。我承认我不理解 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

然后,您必须使用 dcastmargins 参数来获取所需的输出。

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”变量(小计)进行小计,并且还添加行总计(使用“变量”)。

也就是说,我不确定是否会推荐这样做,因为您在同一个表中混合了数据和分析。

关于R - 带小计的数据透视表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47869045/

相关文章:

r - 在 R 中不循环的情况下翻转字符串向量中的二进制数字

r - 如何在不执行 sum 或 mean 之类的函数的情况下 reshape data.table(从长到宽)?

r - 将 dcast.data.table 与日期值和聚合一起使用

sql-server - 如何读取从 R 中的 SQL Server 存储过程返回的多个结果集

r - 如何在 ggplot2 中绘制通过 fastshp 加载的 shapefile?

r - 查找一行中所有并列的最大值,如果列包含最大值,则返回 true 或 false

r - 复制数据框的观察结果,但也替换 R 中的特定变量值

r - 使dcast中的drop参数仅查看公式的RHS

r - 以奇怪的方式应用 dcast

r - 表示多个组的多个列