Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何将三行一组的行相加?_R_Sum_Row - Fatal编程技术网

R 如何将三行一组的行相加?

R 如何将三行一组的行相加?,r,sum,row,R,Sum,Row,我有这些数据,我想要三行的总和,1-3,4-6,7-9,10-12。在我的数据框中,我有48行和795个变量。你能帮我吗 我的数据帧: X1 X2 X3 X4 X5 X6 X7 X8 X9 1 0.00 0.00 136.29 0.00 60.52 0.00 0.00 0.00 0.00 2 0.00 0.00 4658.6

我有这些数据,我想要三行的总和,1-3,4-6,7-9,10-12。在我的数据框中,我有48行和795个变量。你能帮我吗

我的数据帧:

       X1       X2      X3      X4      X5      X6       X7     X8      X9     
1     0.00     0.00  136.29    0.00   60.52    0.00     0.00   0.00    0.00
2     0.00     0.00 4658.69    0.00    0.00 1749.50     0.00   0.00    0.00
3     0.00     0.00    0.00    0.00    0.00  125.86     0.00   0.00    0.00
4     0.00     0.00  119.34    0.00    0.00    0.00     0.00   0.00    0.00
5     0.00     0.00 4674.16 2107.55    0.00    0.00     0.00   0.00    0.00
6     0.00     0.00    0.00    0.00    0.00 5689.40     0.00   0.00    0.00
7  4270.87     0.00    0.00    0.00    0.00 3275.74     0.00   0.00    0.00
8     0.00   455.04    0.00    0.00    0.00 1296.30     0.00   0.00    0.00
9     0.00     0.00    0.00    0.00    0.00 9887.52     0.00   0.00    0.00
10    0.00     0.00    0.00    0.00    0.00    0.00     0.00   0.00    0.00
11    0.00     0.00    0.00    0.00 2169.64    0.00     0.00   0.00  699.93
12    0.00 12524.50    0.00    0.00    0.00    0.00     0.00   0.00    0.00
这就是我想要的:

       X1       X2      X3      X4      X5      X6       X7     X8      X9
1     0.00     0.00  ......
2     0.00     0.00  ......
3  4270.87   455.04  ......
4     0.00 12524.50  ......

下面的代码是从源代码()修改的
dplyr
解决方案

它通过创建一个索引变量来对行进行分组,然后获取这些子集行的行和来解决这个问题
n
可以取任何值,只要
nrow(df)
可以被
n
整除

df <- data.frame(runif(30), runif(30), runif(30))
library(plyr); library(dplyr)

n <- 3

df %>%
  group_by(indx = gl(ceiling(nrow(df)/n), n, nrow(df))) %>%
  summarise_each(funs(sum))
df%
每个项目的总结(funs(sum))

使用
过滤器的基本R解决方案
(即
stats::filter
-如果已经加载,则
dplyr
会推平-小心):

正如@alexis_laz在上文
中所指出的那样,行和
可能更可取,因为它是为此明确定义的,形式如下:

rowsum(data, appropriate_grouping_vector)
比如说:

rowsum(dat, (1:nrow(dat) - 1) %/% 3)
#       X1       X2      X3      X4      X5       X6 X7 X8     X9
#0    0.00     0.00 4794.98    0.00   60.52  1875.36  0  0   0.00
#1    0.00     0.00 4793.50 2107.55    0.00  5689.40  0  0   0.00
#2 4270.87   455.04    0.00    0.00    0.00 14459.56  0  0   0.00
#3    0.00 12524.50    0.00    0.00 2169.64     0.00  0  0 699.93

在n行上拆分数据,然后求和:

# dummy data
df1 <- mtcars[1:12, 1:6]

# split sum combine 
t(sapply(split(df1, rep(1:4, each = 3)), colSums))
#虚拟数据
df1这也将起作用:

df$group <- ceiling((1:nrow(df))/3)
aggregate(. ~ group, data = df, sum)[-1]

       X1       X2      X3      X4      X5       X6 X7 X8     X9
1    0.00     0.00 4794.98    0.00   60.52  1875.36  0  0   0.00
2    0.00     0.00 4793.50 2107.55    0.00  5689.40  0  0   0.00
3 4270.87   455.04    0.00    0.00    0.00 14459.56  0  0   0.00
4    0.00 12524.50    0.00    0.00 2169.64     0.00  0  0 699.93

df$group另见,
?行和
--
行和(数据,适当的分组向量)
@alexis\u laz nice one,太简单了<代码> RoSoMe(DF1,ReP(1:4,每个=3))< /代码>,考虑张贴作为答案。我总是忘记
rowsum
——这是一个比下面我的解决方案好得多的解决方案。
df$group <- ceiling((1:nrow(df))/3)
aggregate(. ~ group, data = df, sum)[-1]

       X1       X2      X3      X4      X5       X6 X7 X8     X9
1    0.00     0.00 4794.98    0.00   60.52  1875.36  0  0   0.00
2    0.00     0.00 4793.50 2107.55    0.00  5689.40  0  0   0.00
3 4270.87   455.04    0.00    0.00    0.00 14459.56  0  0   0.00
4    0.00 12524.50    0.00    0.00 2169.64     0.00  0  0 699.93