[R] Repeat

David Winsemius dwinsemius at comcast.net
Sun Feb 26 02:39:16 CET 2017


> On Feb 25, 2017, at 4:36 PM, Ashta <sewashm at gmail.com> wrote:
> 
> Thank you so much David!
> 
> But if all element of a group has '-'  did not work. In this case year
> 2006 an example
> If all values of flag  are '-' within year  then  I wan to set as N

I don't see the difficulty (and your example did not provide a suitable platform for demonstration.)  Set the remaining dashes to "N". 



-- 
David.
> 
> 
> dat=read.table(text = "Year month flag
> 2001 1   Z
> 2001 2   -
> 2001 4   X
> 2002 1   Z
> 2002 2   -
> 2003 1   -
> 2003 2   Z
> 2004 2   Z
> 2005 3   Z
> 2005 2   -
> 2005 3   -
> 
> 2006 1   -
> 2006 2   - ",  header = TRUE)
> 
> dat$new <- with(dat, ave(flag, Year, FUN=function(s){ s[s=="-"] <- NA;
>           zoo::na.locf(s) }) )
> 
> Error in `[<-.factor`(`*tmp*`, i, value = integer(0)) :
>  replacement has length zero
> 
> On Sat, Feb 25, 2017 at 5:43 PM, David Winsemius <dwinsemius at comcast.net> wrote:
>> 
>>> On Feb 25, 2017, at 10:45 AM, Ashta <sewashm at gmail.com> wrote:
>>> 
>>> Thank you David.
>>> is it not possible to sort it by year and flag so that we can make '-'
>>> in the second row ?  like this for that particular year.
>>> 
>>>  2003 2     Z
>>>  2003 1      -
>>> 
>> 
>> I was a bit surprised by the results of htis since I had assumed than an initial NA in a group would remain so, but apparently not:
>> 
>> dat$new <- with(dat, ave(flag, Year, FUN=function(s){ s[s=="-"] <- NA; zoo::na.locf(s) }) )
>> 
>>> dat
>>   Year month flag new
>> 1  2001     1    Z   Z
>> 2  2001     2    -   Z
>> 3  2001     4    X   X
>> 4  2002     1    Z   Z
>> 5  2002     2    -   Z
>> 6  2003     1    -   Z
>> 7  2003     2    Z   Z
>> 8  2004     2    Z   Z
>> 9  2005     3    Z   Z
>> 10 2005     2    -   Z
>> 11 2005     3    -   Z
>> 
>> David.
>> 
>>> 
>>> 
>>> On Sat, Feb 25, 2017 at 12:14 PM, David Winsemius
>>> <dwinsemius at comcast.net> wrote:
>>>> 
>>>>> On Feb 25, 2017, at 8:09 AM, Ashta <sewashm at gmail.com> wrote:
>>>>> 
>>>>> I have a data set and I want to repeat a column value based on other
>>>>> column value,
>>>>> 
>>>>> my data look like
>>>>> 
>>>>> read.table(text = "Year month flag
>>>>> 2001 1   Z
>>>>> 2001 2   -
>>>>> 2001 4   X
>>>>> 2002 1   Z
>>>>> 2002 2   -
>>>>> 2003 1   -
>>>>> 2003 2   Z
>>>>> 2004 2   Z
>>>>> 2005 3   Z
>>>>> 2005 2   -
>>>>> 2005 3   -",  header = TRUE)
>>>>> 
>>>>> Within year If  flag = '-'  then i want replace  '-'  by the previous
>>>>> row value of flag. In this example  for yea  2001 in month 2 flag is
>>>>> '-' and I want replace it by the previous value of flag (i.e.,  'Z')
>>>>> 2001 1   Z
>>>>> 2001 2   Z
>>>>> 2001 4   X
>>>>> 
>>>>> If all values of flag  are '-' within year  then  I wan to set as N
>>>>> 
>>>>> The complete out put result will be
>>>>> 
>>>>> year month  flag
>>>>> 2001 1       Z
>>>>> 2001 2       z
>>>>> 2001 4       X
>>>>> 2002 1       Z
>>>>> 2002 2       Z
>>>>> 2003 1       Z
>>>>> 2003 2       Z
>>>>> 2004 2       Z
>>>>> 2005 3       Z
>>>>> 2005 2       N
>>>>> 2005 3       N
>>>>> 
>>>>> Thank you in advance
>>>>> 
>>>> 
>>>> Your example doesn't actually match your verbal description of the algorithm because you have not specified the rule that establishes values for instances where the first value in a year is "-".
>>>> 
>>>> The `na.locf` function in the 'zoo' package would be useful for the task describe in your verbal description when used in conjunction with the 'stats'-package's `ave` function.
>>>> 
>>>> --
>>>> David.
>>>> 
>>>> 
>>>>> ______________________________________________
>>>>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
>>>>> 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.
>>>> 
>>>> David Winsemius
>>>> Alameda, CA, USA
>>>> 
>> 
>> David Winsemius
>> Alameda, CA, USA
>> 

David Winsemius
Alameda, CA, USA



More information about the R-help mailing list