Discussion:
[R] Sum of two consecutive number in dataset.
Frederic Ntirenganya
2014-10-15 07:01:27 UTC
Permalink
Dear All,

i am solving the following problem in my work.

The first day from April 01 that gets more than 20 mm on a single day, or
totalled
over 2 consecutive days. i.e April 01 = 92th day of the year.

The column of interest is "Rain".
head(Samaru56)
Year Day Rain
1 1928 1 0
2 1928 2 0
3 1928 3 0
4 1928 4 0
5 1928 5 0
6 1928 6 0

I used the loop below but it is not printing anything.

sow_day=c()
for (i in 1928:1983){
for (j in 92:366){
k=j-1
s_rain=Samaru56$Rain[k] + Samaru56$Rain[j]
if (s_rain>=20)
sow_day=j
break
}
Samaru56$year=Samaru56$Year[sow_day]
Samaru56$Day=Samaru56$Day[sow_day]
Samaru56$Rain=Samaru56$Rain[sow_day]
}
sow_day

Any idea is welcome on how I can solve this problem. Thanks
--
Frederic Ntirenganya
Maseno University,
Kenya.
Mobile:(+254)718492836
Email: fredo at aims.ac.za
https://sites.google.com/a/aims.ac.za/fredo/

[[alternative HTML version deleted]]
PIKAL Petr
2014-10-15 09:59:40 UTC
Permalink
Hi

twodays <- rowSums(embed(Samaru56$Rain,2))

gives you sum of rain in 2 cosecutive days

sel <- which(twodays>20)

gives you vector of row numbers in which above condition results in TRUE value

Samaru56[sel,]

selects these rows

Regards
Petr
-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
project.org] On Behalf Of Frederic Ntirenganya
Sent: Wednesday, October 15, 2014 9:01 AM
To: r-help at r-project.org
Subject: [R] Sum of two consecutive number in dataset.
Dear All,
i am solving the following problem in my work.
The first day from April 01 that gets more than 20 mm on a single day,
or totalled over 2 consecutive days. i.e April 01 = 92th day of the
year.
The column of interest is "Rain".
head(Samaru56)
Year Day Rain
1 1928 1 0
2 1928 2 0
3 1928 3 0
4 1928 4 0
5 1928 5 0
6 1928 6 0
I used the loop below but it is not printing anything.
sow_day=c()
for (i in 1928:1983){
for (j in 92:366){
k=j-1
s_rain=Samaru56$Rain[k] + Samaru56$Rain[j]
if (s_rain>=20)
sow_day=j
break
}
Samaru56$year=Samaru56$Year[sow_day]
Samaru56$Day=Samaru56$Day[sow_day]
Samaru56$Rain=Samaru56$Rain[sow_day]
}
sow_day
Any idea is welcome on how I can solve this problem. Thanks
--
Frederic Ntirenganya
Maseno University,
Kenya.
Mobile:(+254)718492836
Email: fredo at aims.ac.za
https://sites.google.com/a/aims.ac.za/fredo/
[[alternative HTML version deleted]]
______________________________________________
R-help at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-
guide.html
and provide commented, minimal, self-contained, reproducible code.
________________________________
Tento e-mail a jak?koliv k n?mu p?ipojen? dokumenty jsou d?v?rn? a jsou ur?eny pouze jeho adres?t?m.
Jestli?e jste obdr?el(a) tento e-mail omylem, informujte laskav? neprodlen? jeho odes?latele. Obsah tohoto emailu i s p??lohami a jeho kopie vyma?te ze sv?ho syst?mu.
Nejste-li zam??len?m adres?tem tohoto emailu, nejste opr?vn?ni tento email jakkoliv u??vat, roz?i?ovat, kop?rovat ?i zve?ej?ovat.
Odes?latel e-mailu neodpov?d? za eventu?ln? ?kodu zp?sobenou modifikacemi ?i zpo?d?n?m p?enosu e-mailu.

V p??pad?, ?e je tento e-mail sou??st? obchodn?ho jedn?n?:
- vyhrazuje si odes?latel pr?vo ukon?it kdykoliv jedn?n? o uzav?en? smlouvy, a to z jak?hokoliv d?vodu i bez uveden? d?vodu.
- a obsahuje-li nab?dku, je adres?t opr?vn?n nab?dku bezodkladn? p?ijmout; Odes?latel tohoto e-mailu (nab?dky) vylu?uje p?ijet? nab?dky ze strany p??jemce s dodatkem ?i odchylkou.
- trv? odes?latel na tom, ?e p??slu?n? smlouva je uzav?ena teprve v?slovn?m dosa?en?m shody na v?ech jej?ch n?le?itostech.
- odes?latel tohoto emailu informuje, ?e nen? opr?vn?n uzav?rat za spole?nost ??dn? smlouvy s v?jimkou p??pad?, kdy k tomu byl p?semn? zmocn?n nebo p?semn? pov??en a takov? pov??en? nebo pln? moc byly adres?tovi tohoto emailu p??padn? osob?, kterou adres?t zastupuje, p?edlo?eny nebo jejich existence je adres?tovi ?i osob? j?m zastoupen? zn?m?.

This e-mail and any documents attached to it may be confidential and are intended only for its intended recipients.
If you received this e-mail by mistake, please immediately inform its sender. Delete the contents of this e-mail with all attachments and its copies from your system.
If you are not the intended recipient of this e-mail, you are not authorized to use, disseminate, copy or disclose this e-mail in any manner.
The sender of this e-mail shall not be liable for any possible damage caused by modifications of the e-mail or by delay with transfer of the email.

In case that this e-mail forms part of business dealings:
- the sender reserves the right to end negotiations about entering into a contract in any time, for any reason, and without stating any reasoning.
- if the e-mail contains an offer, the recipient is entitled to immediately accept such offer; The sender of this e-mail (offer) excludes any acceptance of the offer on the part of the recipient containing any amendment or variation.
- the sender insists on that the respective contract is concluded only upon an express mutual agreement on all its aspects.
- the sender of this e-mail informs that he/she is not authorized to enter into any contracts on behalf of the company except for cases in which he/she is expressly authorized to do so in writing, and such authorization or power of attorney is submitted to the recipient or the person represented by the recipient, or the existence of such authorization is known to the recipient of the person represented by the recipient.
Franklin Mairura
2014-10-15 12:26:07 UTC
Permalink
Hi, this sound like u are calculating cummulative rainfall, this can also be done in excel, then import the matrix to R, hope can help,
Franklin, Maseno, Kenya.



On Wednesday, October 15, 2014 1:02 PM, PIKAL Petr <petr.pikal at precheza.cz> wrote:



Hi

twodays <- rowSums(embed(Samaru56$Rain,2))

gives you sum of rain in 2 cosecutive days

sel <- which(twodays>20)

gives you vector of row numbers in which above condition results in TRUE value

Samaru56[sel,]

selects these rows

Regards
Petr
-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
project.org] On Behalf Of Frederic Ntirenganya
Sent: Wednesday, October 15, 2014 9:01 AM
To: r-help at r-project.org
Subject: [R] Sum of two consecutive number in dataset.
Dear All,
i am solving the following problem in my work.
The first day from April 01 that gets more than 20 mm on a single day,
or totalled over 2 consecutive days. i.e April 01 = 92th day of the
year.
The column of interest is "Rain".
head(Samaru56)
Year Day Rain
1 1928 1 0
2 1928 2 0
3 1928 3 0
4 1928 4 0
5 1928 5 0
6 1928 6 0
I used the loop below but it is not printing anything.
sow_day=c()
for (i in 1928:1983){
for (j in 92:366){
k=j-1
s_rain=Samaru56$Rain[k] + Samaru56$Rain[j]
if (s_rain>=20)
sow_day=j
break
}
Samaru56$year=Samaru56$Year[sow_day]
Samaru56$Day=Samaru56$Day[sow_day]
Samaru56$Rain=Samaru56$Rain[sow_day]
}
sow_day
Any idea is welcome on how I can solve this problem. Thanks
--
Frederic Ntirenganya
Maseno University,
Kenya.
Mobile:(+254)718492836
Email: fredo at aims.ac.za
https://sites.google.com/a/aims.ac.za/fredo/
[[alternative HTML version deleted]]
______________________________________________
R-help at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-
guide.html
and provide commented, minimal, self-contained, reproducible code.
________________________________
Tento e-mail a jak?koliv k n?mu p?ipojen? dokumenty jsou d?v?rn? a jsou ur?eny pouze jeho adres?t?m.
Jestli?e jste obdr?el(a) tento e-mail omylem, informujte laskav? neprodlen? jeho odes?latele. Obsah tohoto emailu i s p??lohami a jeho kopie vyma?te ze sv?ho syst?mu.
Nejste-li zam??len?m adres?tem tohoto emailu, nejste opr?vn?ni tento email jakkoliv u??vat, roz?i?ovat, kop?rovat ?i zve?ej?ovat.
Odes?latel e-mailu neodpov?d? za eventu?ln? ?kodu zp?sobenou modifikacemi ?i zpo?d?n?m p?enosu e-mailu.

V p??pad?, ?e je tento e-mail sou??st? obchodn?ho jedn?n?:
- vyhrazuje si odes?latel pr?vo ukon?it kdykoliv jedn?n? o uzav?en? smlouvy, a to z jak?hokoliv d?vodu i bez uveden? d?vodu.
- a obsahuje-li nab?dku, je adres?t opr?vn?n nab?dku bezodkladn? p?ijmout; Odes?latel tohoto e-mailu (nab?dky) vylu?uje p?ijet? nab?dky ze strany p??jemce s dodatkem ?i odchylkou.
- trv? odes?latel na tom, ?e p??slu?n? smlouva je uzav?ena teprve v?slovn?m dosa?en?m shody na v?ech jej?ch n?le?itostech.
- odes?latel tohoto emailu informuje, ?e nen? opr?vn?n uzav?rat za spole?nost ??dn? smlouvy s v?jimkou p??pad?, kdy k tomu byl p?semn? zmocn?n nebo p?semn? pov??en a takov? pov??en? nebo pln? moc byly adres?tovi tohoto emailu p??padn? osob?, kterou adres?t zastupuje, p?edlo?eny nebo jejich existence je adres?tovi ?i osob? j?m zastoupen? zn?m?.

This e-mail and any documents attached to it may be confidential and are intended only for its intended recipients.
If you received this e-mail by mistake, please immediately inform its sender. Delete the contents of this e-mail with all attachments and its copies from your system.
If you are not the intended recipient of this e-mail, you are not authorized to use, disseminate, copy or disclose this e-mail in any manner.
The sender of this e-mail shall not be liable for any possible damage caused by modifications of the e-mail or by delay with transfer of the email.

In case that this e-mail forms part of business dealings:
- the sender reserves the right to end negotiations about entering into a contract in any time, for any reason, and without stating any reasoning.
- if the e-mail contains an offer, the recipient is entitled to immediately accept such offer; The sender of this e-mail (offer) excludes any acceptance of the offer on the part of the recipient containing any amendment or variation.
- the sender insists on that the respective contract is concluded only upon an express mutual agreement on all its aspects.
- the sender of this e-mail informs that he/she is not authorized to enter into any contracts on behalf of the company except for cases in which he/she is expressly authorized to do so in writing, and such authorization or power of attorney is submitted to the recipient or the person represented by the recipient, or the existence of such authorization is known to the recipient of the person represented by the recipient.

______________________________________________
R-help at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
[[alternative HTML version deleted]]
Jeff Newmiller
2014-10-15 15:34:23 UTC
Permalink
twodays <- c(filter(x,c(1,1),sides=1))

might be more efficient with memory than the embed approach, which might be important if more than two days were of interest.
---------------------------------------------------------------------------
Jeff Newmiller The ..... ..... Go Live...
DCN:<jdnewmil at dcn.davis.ca.us> Basics: ##.#. ##.#. Live Go...
Live: OO#.. Dead: OO#.. Playing
Research Engineer (Solar/Batteries O.O#. #.O#. with
/Software/Embedded Controllers) .OO#. .OO#. rocks...1k
---------------------------------------------------------------------------
Sent from my phone. Please excuse my brevity.
Post by PIKAL Petr
Hi
twodays <- rowSums(embed(Samaru56$Rain,2))
gives you sum of rain in 2 cosecutive days
sel <- which(twodays>20)
gives you vector of row numbers in which above condition results in TRUE value
Samaru56[sel,]
selects these rows
Regards
Petr
-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
project.org] On Behalf Of Frederic Ntirenganya
Sent: Wednesday, October 15, 2014 9:01 AM
To: r-help at r-project.org
Subject: [R] Sum of two consecutive number in dataset.
Dear All,
i am solving the following problem in my work.
The first day from April 01 that gets more than 20 mm on a single
day,
or totalled over 2 consecutive days. i.e April 01 = 92th day of the
year.
The column of interest is "Rain".
head(Samaru56)
Year Day Rain
1 1928 1 0
2 1928 2 0
3 1928 3 0
4 1928 4 0
5 1928 5 0
6 1928 6 0
I used the loop below but it is not printing anything.
sow_day=c()
for (i in 1928:1983){
for (j in 92:366){
k=j-1
s_rain=Samaru56$Rain[k] + Samaru56$Rain[j]
if (s_rain>=20)
sow_day=j
break
}
Samaru56$year=Samaru56$Year[sow_day]
Samaru56$Day=Samaru56$Day[sow_day]
Samaru56$Rain=Samaru56$Rain[sow_day]
}
sow_day
Any idea is welcome on how I can solve this problem. Thanks
--
Frederic Ntirenganya
Maseno University,
Kenya.
Mobile:(+254)718492836
Email: fredo at aims.ac.za
https://sites.google.com/a/aims.ac.za/fredo/
[[alternative HTML version deleted]]
______________________________________________
R-help at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-
guide.html
and provide commented, minimal, self-contained, reproducible code.
________________________________
Tento e-mail a jak?koliv k n?mu p?ipojen? dokumenty jsou d?v?rn? a jsou
ur?eny pouze jeho adres?t?m.
Jestli?e jste obdr?el(a) tento e-mail omylem, informujte laskav?
neprodlen? jeho odes?latele. Obsah tohoto emailu i s p??lohami a jeho
kopie vyma?te ze sv?ho syst?mu.
Nejste-li zam??len?m adres?tem tohoto emailu, nejste opr?vn?ni tento
email jakkoliv u??vat, roz?i?ovat, kop?rovat ?i zve?ej?ovat.
Odes?latel e-mailu neodpov?d? za eventu?ln? ?kodu zp?sobenou
modifikacemi ?i zpo?d?n?m p?enosu e-mailu.
- vyhrazuje si odes?latel pr?vo ukon?it kdykoliv jedn?n? o uzav?en?
smlouvy, a to z jak?hokoliv d?vodu i bez uveden? d?vodu.
- a obsahuje-li nab?dku, je adres?t opr?vn?n nab?dku bezodkladn?
p?ijmout; Odes?latel tohoto e-mailu (nab?dky) vylu?uje p?ijet? nab?dky
ze strany p??jemce s dodatkem ?i odchylkou.
- trv? odes?latel na tom, ?e p??slu?n? smlouva je uzav?ena teprve
v?slovn?m dosa?en?m shody na v?ech jej?ch n?le?itostech.
- odes?latel tohoto emailu informuje, ?e nen? opr?vn?n uzav?rat za
spole?nost ??dn? smlouvy s v?jimkou p??pad?, kdy k tomu byl p?semn?
zmocn?n nebo p?semn? pov??en a takov? pov??en? nebo pln? moc byly
adres?tovi tohoto emailu p??padn? osob?, kterou adres?t zastupuje,
p?edlo?eny nebo jejich existence je adres?tovi ?i osob? j?m zastoupen?
zn?m?.
This e-mail and any documents attached to it may be confidential and
are intended only for its intended recipients.
If you received this e-mail by mistake, please immediately inform its
sender. Delete the contents of this e-mail with all attachments and its
copies from your system.
If you are not the intended recipient of this e-mail, you are not
authorized to use, disseminate, copy or disclose this e-mail in any
manner.
The sender of this e-mail shall not be liable for any possible damage
caused by modifications of the e-mail or by delay with transfer of the
email.
- the sender reserves the right to end negotiations about entering into
a contract in any time, for any reason, and without stating any
reasoning.
- if the e-mail contains an offer, the recipient is entitled to
immediately accept such offer; The sender of this e-mail (offer)
excludes any acceptance of the offer on the part of the recipient
containing any amendment or variation.
- the sender insists on that the respective contract is concluded only
upon an express mutual agreement on all its aspects.
- the sender of this e-mail informs that he/she is not authorized to
enter into any contracts on behalf of the company except for cases in
which he/she is expressly authorized to do so in writing, and such
authorization or power of attorney is submitted to the recipient or the
person represented by the recipient, or the existence of such
authorization is known to the recipient of the person represented by
the recipient.
______________________________________________
R-help at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide
http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Tom Wright
2014-10-15 14:15:42 UTC
Permalink
A couple of observations:
1) I'm not sure what the variable i is doing, looks like you are trying
to loop through years but perhaps you left that bit of code out for
clarity.
2) On the first loop of i you are assigning the values of
Samaru56[sow_day,] to all values in Samaru56. For future loops all
values on Samaru56 will be the same.

My approach to this problem would be:
rowCount<-nrow(Samaru56)
Samaru56$two_day<-vector(length=rowCount)

#first day doesnt have a two day value
Samaru56$two_day[2:rowCount]<-
Samaru56$Rain[1:rowCount-1] + Samaru56$Rain[2:rowCount]

sow_day <- min(c(
which(Samaru56$Rain > 20 & Samaru$Day>91),
which(Samaru56$two_day > 20 & Samaru$Day>91)))


#first day doesnt have a two day value
Post by Frederic Ntirenganya
Dear All,
i am solving the following problem in my work.
The first day from April 01 that gets more than 20 mm on a single day, or
totalled
over 2 consecutive days. i.e April 01 = 92th day of the year.
The column of interest is "Rain".
head(Samaru56)
Year Day Rain
1 1928 1 0
2 1928 2 0
3 1928 3 0
4 1928 4 0
5 1928 5 0
6 1928 6 0
I used the loop below but it is not printing anything.
sow_day=c()
for (i in 1928:1983){
for (j in 92:366){
k=j-1
s_rain=Samaru56$Rain[k] + Samaru56$Rain[j]
if (s_rain>=20)
sow_day=j
break
}
Samaru56$year=Samaru56$Year[sow_day]
Samaru56$Day=Samaru56$Day[sow_day]
Samaru56$Rain=Samaru56$Rain[sow_day]
}
sow_day
Any idea is welcome on how I can solve this problem. Thanks
William Dunlap
2014-10-15 15:11:00 UTC
Permalink
Break down your problem into parts:
# compute two-day totals. I use filter here, but there are many ways
twoDayTotal <- function (x, init = 0)
{
# init lets you supply rainfall from day previous to first in x
filter(c(init, x), c(1, 1))[-length(x)]
}
# compute the first time a logical vector contains a TRUE
firstTime <-function (x, time. = as.vector(time(x)))
{
stopifnot(is.logical(x))
time.[!is.na(x) & x][1]
}
# combine them
f <- function(x, ...) firstTime(x>22 | twoDayTotal(x)>22, ...)
# test it
f(c(5, 20, 3, 4, 25))
# [1] 2
f(c(0, 25, 3, 4, 25), time=92:96)
# [1] 93
f(ts(c(0, 25, 3, 4, 25), start=92))
# [1] 93


Bill Dunlap
TIBCO Software
wdunlap tibco.com


On Wed, Oct 15, 2014 at 12:01 AM, Frederic Ntirenganya
Post by Frederic Ntirenganya
Dear All,
i am solving the following problem in my work.
The first day from April 01 that gets more than 20 mm on a single day, or
totalled
over 2 consecutive days. i.e April 01 = 92th day of the year.
The column of interest is "Rain".
head(Samaru56)
Year Day Rain
1 1928 1 0
2 1928 2 0
3 1928 3 0
4 1928 4 0
5 1928 5 0
6 1928 6 0
I used the loop below but it is not printing anything.
sow_day=c()
for (i in 1928:1983){
for (j in 92:366){
k=j-1
s_rain=Samaru56$Rain[k] + Samaru56$Rain[j]
if (s_rain>=20)
sow_day=j
break
}
Samaru56$year=Samaru56$Year[sow_day]
Samaru56$Day=Samaru56$Day[sow_day]
Samaru56$Rain=Samaru56$Rain[sow_day]
}
sow_day
Any idea is welcome on how I can solve this problem. Thanks
--
Frederic Ntirenganya
Maseno University,
Kenya.
Mobile:(+254)718492836
Email: fredo at aims.ac.za
https://sites.google.com/a/aims.ac.za/fredo/
[[alternative HTML version deleted]]
______________________________________________
R-help at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Loading...