0

我是 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 等)

谢谢,

4

3 回答 3

4

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
于 2018-09-14T22:45:31.700 回答
0

首先让我们生成一些数据并为每个组获取一个标签:

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
于 2018-09-14T23:31:47.537 回答
-1

我创建了一个包含 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)
于 2018-09-14T22:10:17.690 回答