我试图找出一种基于行标识符执行数学运算的优化方法。
样本数据集如下:
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
只是一个例子,我会做更复杂的操作。关键是基于行键对数据进行子集化,然后执行操作,存储然后继续执行直到达到最后一行键为止。
任何建议都会有所帮助,谢谢。
答案 0 :(得分:2)
来自dplyr
的解决方案。如果要进行更复杂的操作,例如将不同的函数应用于不同的列。 summarise_at
或summarise_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)