# [R] Vector grouping challenge

jim holtman jholtman at gmail.com
Wed Oct 28 13:50:09 CET 2009

What the breaks are is that you are looking to see where the NAs
start.  In your case, you wanted the value at the start of the NA
string to be grouped with the following NAs.  The 'is.na' will return
TRUE for NAs and if you invert the vector, you will have TRUE for each
of the non-NA values.  By doing the 'cumsum' you will get the same
values for the NAs that follow a non-NA:

> is.na(testVector)
[1] FALSE FALSE  TRUE  TRUE FALSE  TRUE FALSE FALSE FALSE  TRUE  TRUE
TRUE FALSE
> cumsum(!is.na(testVector))
[1] 1 2 2 2 3 3 4 5 6 6 6 6 7

The result of the 'cumsum' is then then grouping factor for split.

HTH

On Wed, Oct 28, 2009 at 8:43 AM, Johannes Graumann
<johannes_graumann at web.de> wrote:
> Just so. I got until 'split' but was stuck on how to get the breaks ...
>
> Thank you!
>
> Joh
>
> jim holtman wrote:
>
>> Is this what you want:
>>
>>>  testVector <- c(12,32,NA,NA,56,NA,78,65,87,NA,NA,NA,90)
>>>  # get the breaks at the NAs
>>>  xb <- cumsum(!is.na(testVector))
>>>  split(seq(length(testVector)), xb)
>> \$`1`
>> [1] 1
>>
>> \$`2`
>> [1] 2 3 4
>>
>> \$`3`
>> [1] 5 6
>>
>> \$`4`
>> [1] 7
>>
>> \$`5`
>> [1] 8
>>
>> \$`6`
>> [1]  9 10 11 12
>>
>> \$`7`
>> [1] 13
>>
>>
>> On Wed, Oct 28, 2009 at 7:57 AM, Johannes Graumann
>> <johannes_graumann at web.de> wrote:
>>> Dear all,
>>>
>>> Is there an efficient way to get this list
>>>> testList <- list(c(1),c(2,3,4),c(5,6),c(7),c(8),c(9,10,11,12),c(13))
>>>
>>> from this vector
>>>> testVector <- c(12,32,NA,NA,56,NA,78,65,87,NA,NA,NA,90)
>>> ?
>>>
>>> Basically the vector should be grouped, such that non-NA and all
>>> following NAs end up in one group.
>>>
>>> Thanks for any hint,
>>>
>>> Joh
>>>
>>> ______________________________________________
>>> R-help at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> http://www.R-project.org/posting-guide.html and provide commented,
>>> minimal, self-contained, reproducible code.
>>>
>>
>>
>>
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> and provide commented, minimal, self-contained, reproducible code.
>

--
Jim Holtman
Cincinnati, OH
+1 513 646 9390

What is the problem that you are trying to solve?