运行 根据行值进行数学运算前的子集数据
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_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)
我正在尝试找出一种基于行标识符执行数学运算的优化方法。
样本数据集如下:
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_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)