Добавление значения строки ниже в R - наиболее эффективно - PullRequest
0 голосов
/ 04 сентября 2018

Мои данные:

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 голосов
/ 04 сентября 2018

Использование ave для суммирования freq каждые 4 года

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...