[R] extract fixed width fields from a string

David Winsemius dwinsemius at comcast.net
Sun Jan 22 20:45:14 CET 2012


On Jan 22, 2012, at 2:31 PM, Sam Steingold wrote:

>> * Bert Gunter <thagre.oregba at trar.pbz> [2012-01-20 11:06:31 -0800]:
>> On Fri, Jan 20, 2012 at 10:52 AM, Sam Steingold <sds at gnu.org> wrote:
>>
>>> then I need to split the two strings by 6/8 characters -- how?
>> This makes no sense to me. strsplit takes care of this.
>
> I want to convert
>
>> c("abcd","de","fghijk")
> [1] "abcd"   "de"     "fghijk"
>
> to
>
> [1] "ab" "cd" "de" "fg" "hi" "jk"
>
> i.e., split strings into substrings of a given length (2 in the above
> example, 9 in my real problem).

 > unlist( strsplit( gsub("(..)", "\\1,", c("abcd","de","fghijk")),  
"," ) )
[1] "ab" "cd" "de" "fg" "hi" "jk"

Change .. to .{9} for you problem.

>
> actually, better yet, from
>
>> data.frame(id=1:3,data=c("abcd","de","fghijk"))
>  id   data
> 1  1   abcd
> 2  2     de
> 3  3 fghijk

rep(1:3, lapply( strsplit( gsub("(..)", "\\1,",  
c("abcd","de","fghijk")), "," ) , length)
+ )
[1] 1 1 2 3 3 3



data.frame(id = rep(1:3, lapply( strsplit( gsub("(..)", "\\1,",  
c("abcd","de","fghijk")), "," ) , length) ),
          data= unlist( strsplit( gsub("(..)", "\\1,",  
c("abcd","de","fghijk")), "," ) )
           )
   id data
1  1   ab
2  1   cd
3  2   de
4  3   fg
5  3   hi
6  3   jk

>
> to
>  id data
> 1  1 ab
> 2  1 cd
> 3  2 de
> 4  3 fg
> 5  3 hi
> 6  3 jk
>
-- 

David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list