运行 根据行值进行数学运算前的子集数据

Run Subset Data Before Performing Math Operation Based on Row Value

我正在尝试找出一种基于行标识符执行数学运算的优化方法。

样本数据集如下:

A   B   C   D   E   F   G   H   I   J   K
0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0
1   1   2   1   1   2   1   2   1   1   2
1   1   2   1   1   2   1   2   1   1   2
1   1   2   1   1   2   1   2   1   1   2
1   1   2   1   1   2   1   2   1   1   2
2   1   2   1   1   2   1   2   1   1   2
2   1   2   1   1   2   1   2   1   1   2
2   1   2   1   1   2   1   2   1   1   2
2   1   2   1   1   2   1   2   1   1   2
3   1   2   1   1   2   1   2   1   1   2
3   1   2   1   1   2   1   2   1   1   2
3   1   2   1   1   2   1   2   1   1   2
3   1   2   1   1   2   1   2   1   1   2
4   1   2   1   1   2   1   2   1   1   2
4   1   2   1   1   2   1   2   1   1   2
4   1   2   1   1   2   1   2   1   1   2
4   1   2   1   1   2   1   2   1   1   2

我想根据第 A 列求行总和。因此,最终输出将有四行:

A   B   C   D   E   F   G   H   I   J   K
0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0
1   4   8   4   8   4   8   4   8   4   8
2   4   8   4   8   4   8   4   8   4   8
3   4   8   4   8   4   8   4   8   4   8
4   4   8   4   8   4   8   4   8   4   8

因为,真正的数据集很大。我无法清楚地思考如何遍历所有数据集并完成所需的操作。 sum 以上只是一个例子,我会做更复杂的操作。 key是根据row key对数据进行子集,然后进行运算,存储,然后一直做,直到最后一个row key。

任何建议都会有帮助,谢谢。

来自 dplyr 的解决方案。如果你想有更复杂的操作,比如对不同的列应用不同的函数。 summarise_atsummarise_if 可能比 summarise_all 更合适。但是,在我们看到一个很好的可重现示例和该情况的问题陈述之前,不可能开发出特定的解决方案。

library(dplyr)

dt2 <- dt %>%
  group_by(A) %>%
  summarise_all(funs(sum(.)))

dt2
# A tibble: 5 x 11
      A     B     C     D     E     F     G     H     I     J     K
  <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int>
1     0     0     0     0     0     0     0     0     0     0     0
2     1     4     8     4     4     8     4     8     4     4     8
3     2     4     8     4     4     8     4     8     4     4     8
4     3     4     8     4     4     8     4     8     4     4     8
5     4     4     8     4     4     8     4     8     4     4     8

更新

这是来自@Wen

的基础 R 方法
dt2 <- aggregate(.~ A, data = dt, FUN = sum)

以及来自 data.table

的解决方案
library(data.table)

dt2 <- setDT(dt)[, lapply(.SD, sum), by = A]

数据

dt <- read.table(text = "A   B   C   D   E   F   G   H   I   J   K
0   0   0   0   0   0   0   0   0   0   0
                 0   0   0   0   0   0   0   0   0   0   0
                 0   0   0   0   0   0   0   0   0   0   0
                 1   1   2   1   1   2   1   2   1   1   2
                 1   1   2   1   1   2   1   2   1   1   2
                 1   1   2   1   1   2   1   2   1   1   2
                 1   1   2   1   1   2   1   2   1   1   2
                 2   1   2   1   1   2   1   2   1   1   2
                 2   1   2   1   1   2   1   2   1   1   2
                 2   1   2   1   1   2   1   2   1   1   2
                 2   1   2   1   1   2   1   2   1   1   2
                 3   1   2   1   1   2   1   2   1   1   2
                 3   1   2   1   1   2   1   2   1   1   2
                 3   1   2   1   1   2   1   2   1   1   2
                 3   1   2   1   1   2   1   2   1   1   2
                 4   1   2   1   1   2   1   2   1   1   2
                 4   1   2   1   1   2   1   2   1   1   2
                 4   1   2   1   1   2   1   2   1   1   2
                 4   1   2   1   1   2   1   2   1   1   2",
                 header = TRUE)