每五行中的第一行重复五次

问题描述 投票:0回答:1

我有一个包含 960 个观测值的面板数据框,我想创建一个新变量,其中包含按国家/地区每五行的第一行。

df <- data.frame(
  year=rep(c(2001:2010),2),
  country=c(rep("A",10),rep("B",10)),
  Old.var= c(12,26,14,9,7,42,13,12,24,13, 19,32,44,63,24,12,16,9,10, 5)
)

 year country Old.var
1  2001       A      12
2  2002       A      26
3  2003       A      14
4  2004       A       9
5  2005       A       7
6  2006       A      42
7  2007       A      13
8  2008       A      12
9  2009       A      24
10 2010       A      13
11 2001       B      19
12 2002       B      32
13 2003       B      44
14 2004       B      63
15 2005       B      24
16 2006       B      12
17 2007       B      16
18 2008       B       9
19 2009       B      10
20 2010       B       5

我需要创建一个名为 new.var 的新列,其中包含每五行中的第一行

df.new <- data.frame(
  year=rep(c(2001:2010),2),
  country=c(rep("A",10),rep("B",10)),
  Old.var= c(12,26,14,9,7,42,13,12,24,13, 19,32,44,63,24,12,16,9,10, 5),
  new.var= c(12,12,12,12,12,42,42,42,42,42,19,19,19,19,19,12,12,12,12,12)
  
)
year country Old.var new.var
1  2001       A      12      12
2  2002       A      26      12
3  2003       A      14      12
4  2004       A       9      12
5  2005       A       7      12
6  2006       A      42      42
7  2007       A      13      42
8  2008       A      12      42
9  2009       A      24      42
10 2010       A      13      42
11 2001       B      19      19
12 2002       B      32      19
13 2003       B      44      19
14 2004       B      63      19
15 2005       B      24      19
16 2006       B      12      12
17 2007       B      16      12
18 2008       B       9      12
19 2009       B      10      12
20 2010       B       5      12
r
1个回答
0
投票

一种方法是向每个国家/地区添加一个新列,定义为行号减去 1 除以 5 的整数部分,然后按该行和国家/地区进行分组,并按组分配

Old.var
的第一个值。例如,使用
dplyr
:

library(dplyr)
df |>
    mutate(
        grp = (row_number() - 1) %/% 5,
        .by = country
    ) |>
    mutate(
        new.var = first(Old.var), .by = c(country, grp)
    )

#    year country Old.var grp new.var
# 1  2001       A      12   0      12
# 2  2002       A      26   0      12
# 3  2003       A      14   0      12
# 4  2004       A       9   0      12
# 5  2005       A       7   0      12
# 6  2006       A      42   1      42
# 7  2007       A      13   1      42
# 8  2008       A      12   1      42
# 9  2009       A      24   1      42
# 10 2010       A      13   1      42
# 11 2001       B      19   0      19
# 12 2002       B      32   0      19
# 13 2003       B      44   0      19
# 14 2004       B      63   0      19
# 15 2005       B      24   0      19
# 16 2006       B      12   1      12
# 17 2007       B      16   1      12
# 18 2008       B       9   1      12
# 19 2009       B      10   1      12
# 20 2010       B       5   1      12

您可能想要删除

grp
列,但我将其保留在其中,以便更清楚地了解此方法的工作原理。

© www.soinside.com 2019 - 2024. All rights reserved.