在R中添加以下行的值-最有效

时间:2018-09-04 09:28:29

标签: r dataframe

我的数据:

no.att

   year  freq
1  1896   380
2  1900  1936
3  1904  1301
4  1906  1733
5  1908  3101
6  1912  4040
7  1920  4292
8  1924  5693
9  1928  5574
10 1932  3321
11 1936  7401
12 1948  7480
13 1952  9358
14 1956  6434
15 1960  9235
16 1964  9480
17 1968 10479
18 1972 11959
19 1976 10502
20 1980  8937
21 1984 11588
22 1988 14676
23 1992 16413
24 1994  3160
25 1996 13780
26 1998  3605
27 2000 13821
28 2002  4109
29 2004 13443
30 2006  4382
31 2008 13602
32 2010  4402
33 2012 12920
34 2014  4891
35 2016 13688

我的目标: 从1992年开始,并将观察间隔从每4年更改为每2年。

我想每4年保留一次。所以我想->

no.att[24,2] + no.att[25,2]

我的解决方法是:

x <- 24
y <- 25

temp <-  no.att[x,2]
temp1 <- no.att[y,2]

no.att[y,2] <- temp + temp1

x <- x + 2
y <- y + 2

只需运行一次以上内容,然后跳过两行,就可以解决问题。

这种方法的替代方案是什么?

1 个答案:

答案 0 :(得分:1)

每隔4年使用ave合计freq

ans <- dat
ans$freq <- ave(dat$freq, ceiling(dat$year/4), FUN=sum)
ans[ans$year %in% seq(1896,2016,4),]

输出:

   year  freq
1  1896   380
2  1900  1936
3  1904  1301
5  1908  4834
6  1912  4040
7  1920  4292
8  1924  5693
9  1928  5574
10 1932  3321
11 1936  7401
12 1948  7480
13 1952  9358
14 1956  6434
15 1960  9235
16 1964  9480
17 1968 10479
18 1972 11959
19 1976 10502
20 1980  8937
21 1984 11588
22 1988 14676
23 1992 16413
25 1996 16940
27 2000 17426
29 2004 17552
31 2008 17984
33 2012 17322
35 2016 18579

数据:

dat <- read.table(text="year  freq
1896   380
1900  1936
1904  1301
1906  1733
1908  3101
1912  4040
1920  4292
1924  5693
1928  5574
1932  3321
1936  7401
1948  7480
1952  9358
1956  6434
1960  9235
1964  9480
1968 10479
1972 11959
1976 10502
1980  8937
1984 11588
1988 14676
1992 16413
1994  3160
1996 13780
1998  3605
2000 13821
2002  4109
2004 13443
2006  4382
2008 13602
2010  4402
2012 12920
2014  4891
2016 13688", header=TRUE)