[R] data frame manipulation with condition

Sarah Goslee sarah.goslee at gmail.com
Fri Feb 24 17:54:28 CET 2012


You need, as I already suggested, to use a value of 1 for levels you don't want
to change.

> mult <- c(AA = 10, BB = 25, CC=1, DD=15)
> mult[df$x]
AA BB CC AA DD DD
10 25  1 10 15 15
> df$y * mult[df$x]
AA BB CC AA DD DD
10 50  3 40 75 90


On Fri, Feb 24, 2012 at 11:36 AM, Arnaud Gaboury
<arnaud.gaboury at a2ct2.com> wrote:
>> df<- data.frame(x = c("AA","BB","CC","AA","DD","DD"), y = 1:6)
>> mult <- c(AA = 10, BB = 25,DD=15)
>> df$y <- df$y * mult[df$x]
>> df
>   x  y
> 1 AA 10
> 2 BB 50
> 3 CC 45
> 4 AA 40
> 5 DD NA
> 6 DD NA
>
> My df is in fact much more longer than the chosen example shown here. It seems your tip didn't do the job.
> I am expecting this as result :
>
>> df
>   x  y
> 1 AA 10  ----> if df$x==AA, df$y<-1*10
> 2 BB 50   ----> if df$x==BB, df$y<-2*25
> 3 CC 3         NOTHING
> 4 AA 40    ----> if df$x==AA, df$y<-4*10
> 5 DD 75   ----> if df$x==DD, df$y<-5*15
> 6 DD 90   ----> if df$x==DD, df$y<-6*15
>
> Arnaud Gaboury
>
> A2CT2 Ltd.
>
> -----Original Message-----
> From: Uwe Ligges [mailto:ligges at statistik.tu-dortmund.de]
> Sent: vendredi 24 février 2012 17:07
> To: Arnaud Gaboury
> Cc: r-help at r-project.org
> Subject: Re: [R] data frame manipulation with condition
>
>
>
> On 24.02.2012 16:59, Arnaud Gaboury wrote:
>> TY Uwe,
>>
>> So I will have to write a line for each condition? Right?
>>
>> In fact I was trying to do something with apply in one line, but couldn't achieve any result. In fact, all my transformation will be multiplying one object by a specific number according to the value of df$x.
>
> In that case:
>
> mult <- c(AA = 10, BB = 25)
>
> Then:
>
>
> df$y <- df$y * mult[df$x]
>
>
> Uwe Ligges
>
>
>>
>> Arnaud Gaboury
>>
>> A2CT2 Ltd.
>>
>>
>> -----Original Message-----
>> From: Uwe Ligges [mailto:ligges at statistik.tu-dortmund.de]
>> Sent: vendredi 24 février 2012 16:33
>> To: Arnaud Gaboury
>> Cc: r-help at r-project.org
>> Subject: Re: [R] data frame manipulation with condition
>>
>>
>>
>> On 24.02.2012 16:25, Arnaud Gaboury wrote:
>>> Dear list,
>>>
>>> n00b question, but still can't find any easy answer.
>>>
>>> Here is a df:
>>
>>
>> Change
>>
>>>> df<-data.frame(cbind(x=c("AA","BB","CC","AA"),y=1:4))
>>
>> to
>>
>>    df<- data.frame(x = c("AA","BB","CC","AA"), y = 1:4)
>>
>> to make your object a sensible data.frame.
>>
>>
>>
>>>> df
>>>      x y
>>> 1 AA 1
>>> 2 BB 2
>>> 3 CC 3
>>> 4 AA 4
>>>
>>>
>>> I want to modify this df this way :
>>>    if df$x=="AA" then df$y=df$y*10
>>
>> df$y[df$x=="AA"]<- df$y[df$x=="AA"] * 25
>>
>> ...
>>
>>
>> Uwe Ligges
>>
>>
>>>    if df$x=="BB" then df$y=df$y*25
>>
>>
-- 
Sarah Goslee
http://www.functionaldiversity.org



More information about the R-help mailing list