[R] adding column to data frame conditionally

Stephan Kolassa Stephan.Kolassa at gmx.de
Thu May 27 11:52:23 CEST 2010


Hi Kristina,

Thierry's solution is certainly the "correct" one in terms of keeping 
within R's philosophy... but I personally find a series of conditional 
assignments easier to understand - see below for an example.

HTH,
Stephan

#####################################################
# Example

freqg <- data.frame(mat=c(1,1,2,2),flank=c(1,2,1,2))

freqg$condition[freqg$mat==1 & freqg$flank==1] <- 1
freqg$condition[freqg$mat==2 & freqg$flank==1] <- 2

freqg
   mat flank condition
1   1     1         1
2   1     2        NA
3   2     1         2
4   2     2        NA

#####################################################

ONKELINX, Thierry schrieb:
> Dear Kristina,
> 
> Use ifelse(). Note that you must use '==' to test for equality. '=' is
> an assignment.
> 
> Freqg$condition <- with(freqg, ifelse(mat==1 & flank==1, 1, ifelse(mat
> == 2 & flank == 1, 2, NA)))
> 
> HTH,
> 
> Thierry
> 
> ------------------------------------------------------------------------
> ----
> ir. Thierry Onkelinx
> Instituut voor natuur- en bosonderzoek
> team Biometrie & Kwaliteitszorg
> Gaverstraat 4
> 9500 Geraardsbergen
> Belgium
> 
> Research Institute for Nature and Forest
> team Biometrics & Quality Assurance
> Gaverstraat 4
> 9500 Geraardsbergen
> Belgium
> 
> tel. + 32 54/436 185
> Thierry.Onkelinx at inbo.be
> www.inbo.be
> 
> To call in the statistician after the experiment is done may be no more
> than asking him to perform a post-mortem examination: he may be able to
> say what the experiment died of.
> ~ Sir Ronald Aylmer Fisher
> 
> The plural of anecdote is not data.
> ~ Roger Brinner
> 
> The combination of some data and an aching desire for an answer does not
> ensure that a reasonable answer can be extracted from a given body of
> data.
> ~ John Tukey
>   
> 
>> -----Oorspronkelijk bericht-----
>> Van: r-help-bounces at r-project.org 
>> [mailto:r-help-bounces at r-project.org] Namens Kristina Schmitz
>> Verzonden: donderdag 27 mei 2010 11:33
>> Aan: r-help at r-project.org
>> Onderwerp: [R] adding column to data frame conditionally
>>
>> Dear all and thanks in advance for helping me with a rather 
>> stupid question:
>> I imported a data set ("freqg") into R consisting of 14 
>> variables. Now a want to compute a variable and add it in an 
>> additional column to my data frame. The value of this new 
>> variable ("condition") depends on the values of two other 
>> variables ("mat" and "flank") already included in the data frame.
>> For example:
>> if mat=1 and flank=1 -> condition=1
>> if mat=2 and flank=1 -> condition=2
>> ...
>>
>> What I got is this code, which doesn't really work (it 
>> results in a new column called "condition" which takes only 
>> the value "TRUE"):
>>
>> freqg<-transform(freqg,condition=(mat=1)&(flank=1))
>>
>> Thanks in advance and kind regards!
>>
>> ______________________________________________
>> 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.
>>
> 
> Druk dit bericht a.u.b. niet onnodig af.
> Please do not print this message unnecessarily.
> 
> Dit bericht en eventuele bijlagen geven enkel de visie van de schrijver weer 
> en binden het INBO onder geen enkel beding, zolang dit bericht niet bevestigd is
> door een geldig ondertekend document. The views expressed in  this message 
> and any annex are purely those of the writer and may not be regarded as stating 
> an official position of INBO, as long as the message is not confirmed by a duly 
> signed document.
> 
> ______________________________________________
> 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.
>



More information about the R-help mailing list