【问题标题】:How to sum every nth (200) observation in a data frame using R [duplicate]如何使用 R 对数据框中的每 n 个(200)个观察值求和 [重复]
【发布时间】:2019-02-19 17:03:37
【问题描述】:
我是 R 新手,非常感谢任何帮助!
我的 10 个变量中的每一个都有一个包含 278800 个观察值的数据框,我正在尝试创建第 11 个变量,该变量对特定变量/列的每 200 个观察值(或行)求和(sum(1:200, 201: 399, 400:599 等)类似于 excel 中的偏移功能。
我尝试将我的数据子集化为感兴趣的变量,目的是添加一个新变量,该变量每 200 行连续求和,但我无法弄清楚。我知道我的新“变量”将产生 1,394 个数据点 (278,800/200)。我尝试使用 rollapply 函数,但输出的总和不是 200 块,而是 1:200、2:201、3:202 等)
谢谢,
E
【问题讨论】:
标签:
r
offset
rollapply
rowsum
【解决方案1】:
rollapply 有一个 by= 参数。这是一个使用 n = 3 而不是 n = 200 的较小示例。请注意 1+2+3=6、4+5+6=15、7+8+9=24 和 10+11+12=33。
# test data
DF <- data.frame(x = 1:12)
library(zoo)
n <- 3
rollapply(DF$x, n, sum, by = n)
## [1] 6 15 24 33
【解决方案2】:
首先让我们生成一些数据并为每个组获取一个标签:
library(tidyverse)
df <-
rnorm(1000) %>%
as_tibble() %>%
mutate(grp = floor(1 + (row_number() - 1) / 200))
> df
# A tibble: 1,000 x 2
value grp
<dbl> <dbl>
1 -1.06 1
2 0.668 1
3 -2.02 1
4 1.21 1
...
1000 0.78 5
这会创建 1000 个随机的 N(0,1) 个变量,将其转换为一个数据框,然后为每组 200 个添加一个递增的数字标签。
df %>%
group_by(grp) %>%
summarize(grp_sum = sum(value))
# A tibble: 5 x 2
grp grp_sum
<dbl> <dbl>
1 1 9.63
2 2 -12.8
3 3 -18.8
4 4 -8.93
5 5 -25.9
然后我们只需要对第二列进行分组操作并对值求和。您可以使用 pull() 操作来获取结果的向量:
df %>%
group_by(grp) %>%
summarize(grp_sum = sum(value)) %>%
pull(grp_sum)
[1] 9.62529 -12.75193 -18.81967 -8.93466 -25.90523
【解决方案3】:
我创建了一个包含 278800 个观测值的向量 (a)
a<- rnorm(278800)
b<-NULL #initializing the column of interest
j<-1
for (i in seq(1,length(a),by=200)){
b[j]<-sum(a[i:i+199]) #b is your column of interest
j<-j+1
}
View(b)