[R] Extracting part of a factor

KMNanus kmnanus at gmail.com
Fri Mar 4 19:00:55 CET 2016


Here’s the dataset I’m working with, called test - 

subject	group	wk1	wk2	wk3	wk4	place
001-002	boys	2	3	4	5  	
002-003	boys	7	6	5	4	
003-004	boys	9	4	6	1	
004-005	girls	5	7	8	9	
005-006	girls	2	6	3	8	
006-007	girls	1	4	7	4	


if I call mutate(test, place = substr(subject,1,3), “001 is the first observation in the place column

But it’s a character and “subject” is a factor.  I need place to be a factor, too, but I need the observations to be ONLY the first three numbers of “subject.”

Does that make my request more understandable?

Ken
kmnanus at gmail.com
914-450-0816 (tel)
347-730-4813 (fax)



> On Mar 4, 2016, at 12:49 PM, Sarah Goslee <sarah.goslee at gmail.com> wrote:
> 
> Hi Ken,
> 
> You do that with as.factor(), as has already been suggested. You'll need to provide a reproducible example to show us what's going wrong. Using fake data is fine, we just need to see some data that look like yours and the code you're using.
> 
> Sarah
> 
> On Fri, Mar 4, 2016 at 11:57 AM, KMNanus <kmnanus at gmail.com <mailto:kmnanus at gmail.com>> wrote:
> Let me see if I can ask the question more clearly - I am trying to extract a section of a hyphenated factor. For example, 001-004 is one observation of test$ken, which is a factor, and I want to set up a new factor variable called place that would have 001 as an observation. If I call mutate(place = (as.character (test$ken)), I can extract 001 from  001-004, but but don't know how to subsequently convert that character string back into a factor.
> 
> 
> Or can 001 be extracted from a factor as a factor?
> 
> Do you know how to execute either of these approaches?
> 
> Ken
> kmnanus at gmail.com <mailto:kmnanus at gmail.com>
> 914-450-0816 <tel:914-450-0816> (tel)
> 347-730-4813 <tel:347-730-4813> (fax)
> 
> 
> 
> > On Mar 3, 2016, at 8:33 PM, Hervé Pagès <hpages at fredhutch.org <mailto:hpages at fredhutch.org>> wrote:
> >
> > On 03/03/2016 02:13 PM, KMNanus wrote:
> >> When I do that,
> >
> > When you do what exactly?
> >
> > It's impossible for anyone here to know what you're doing if you
> > don't show the code.
> >
> >> I get "Error in `$<-.data.frame`(`*tmp*`, "site", value
> >> = integer(0)) :
> >>   replacement has 0 rows, data has 6”
> >>
> >> The data frame has 6 rows.
> >
> > You said you had a factor variable, you never mentioned you had a
> > data.frame. If the factor variable is part of a data.frame 'df',
> > then first extract it with something like df$myvar or df[["myvar"]],
> > and then call substr() followed by as.factor() on it.
> >
> > H.
> >
> >>
> >> Ken
> >> kmnanus at gmail.com <mailto:kmnanus at gmail.com> <mailto:kmnanus at gmail.com <mailto:kmnanus at gmail.com>>
> >> 914-450-0816 <tel:914-450-0816> (tel)
> >> 347-730-4813 <tel:347-730-4813> (fax)
> >>
> >>
> >>> On Mar 3, 2016, at 4:52 PM, Hervé Pagès <hpages at fredhutch.org <mailto:hpages at fredhutch.org>
> >>> <mailto:hpages at fredhutch.org <mailto:hpages at fredhutch.org>>> wrote:
> >>>
> >>> Hi,
> >>>
> >>> On 03/03/2016 12:18 PM, KMNanus wrote:
> >>>> I have a factor variable that is 6 digits and hyphenated.  For
> >>>> example, 001-014.
> >>>>
> >>>> I need to extract the first 3 digits to a new variable using mutate
> >>>> in dplyr - in this case 001 - but can’t find a function to do it.
> >>>>
> >>>> substr will do this for character strings, but I need the variable to
> >>>> remain as a factor.
> >>>
> >>> What prevents you from calling as.factor() on the result to turn it
> >>> back into a factor?
> >>>
> >>> H.
> >>>
> >>>>
> >>>> Is there an R function  or workaround to do this?
> >>>>
> >>>>
> >>>> Ken
> >>>> kmnanus at gmail.com <mailto:kmnanus at gmail.com> <mailto:kmnanus at gmail.com <mailto:kmnanus at gmail.com>>
> >>>> 914-450-0816 <tel:914-450-0816> (tel)
> >>>> 347-730-4813 <tel:347-730-4813> (fax)
> >>>>
> >>>>
> >>>>
> >>>> ______________________________________________
> >>>> R-help at r-project.org <mailto:R-help at r-project.org> mailing list -- To UNSUBSCRIBE and more, see
> >>>> https://stat.ethz.ch/mailman/listinfo/r-help <https://stat.ethz.ch/mailman/listinfo/r-help>
> >>>> PLEASE do read the posting guide
> >>>> http://www.R-project.org/posting-guide.html <http://www.r-project.org/posting-guide.html>
> >>>> and provide commented, minimal, self-contained, reproducible code.
> >>>>
> >>>
> >>> --
> >>> Hervé Pagès
> >>>
> >>> Program in Computational Biology
> >>> Division of Public Health Sciences
> >>> Fred Hutchinson Cancer Research Center
> >>> 1100 Fairview Ave. N, M1-B514
> >>> P.O. Box 19024
> >>> Seattle, WA 98109-1024
> >>>
> >>> E-mail: hpages at fredhutch.org <mailto:hpages at fredhutch.org> <mailto:hpages at fredhutch.org <mailto:hpages at fredhutch.org>>
> >>> Phone:  (206) 667-5791 <tel:%28206%29%20667-5791>
> >>> Fax:    (206) 667-1319 <tel:%28206%29%20667-1319>
> >>
> >
> > --
> > Hervé Pagès
> >
> > Program in Computational Biology
> > Division of Public Health Sciences
> > Fred Hutchinson Cancer Research Center
> > 1100 Fairview Ave. N, M1-B514
> > P.O. Box 19024
> > Seattle, WA 98109-1024
> >
> > E-mail: hpages at fredhutch.org <mailto:hpages at fredhutch.org>
> > Phone:  (206) 667-5791 <tel:%28206%29%20667-5791>
> > Fax:    (206) 667-1319 <tel:%28206%29%20667-1319>
> 



More information about the R-help mailing list