Thanks for the solution

On Tue, Jun 22, 2010 at 1:02 AM, Peter Ehlers <ehl...@ucalgary.ca> wrote:

> On 2010-06-22 1:45, steven mosher wrote:
>
>> Hmm
>>
>>
>>> DF<-data.frame(name=rep(1:5,each=2),x1=rep("A",10),x2=seq(10,19,by=1),x3=rep(NA,10),x4=seq(20,29,by=1))
>>   DF$x3[5]<-50
>>  mask<-apply(sample,2,"%in%", target)
>>
>
> This is getting confusing. What's 'sample'?
> What's 'target'? Probably what you originally called 'targets'.
>
>
>    DF
>>    name x1 x2 x3 x4
>> 1     1  A 10 NA 20
>> 2     1  A 11 NA 21
>> 3     2  A 12 NA 22
>> 4     2  A 13 NA 23
>> 5     3  A 14 50 24
>> 6     3  A 15 NA 25
>> 7     4  A 16 NA 26
>> 8     4  A 17 NA 27
>> 9     5  A 18 NA 28
>> 10    5  A 19 NA 29
>>   mask
>>       [,1]  [,2]  [,3]  [,4]  [,5]
>> [1,] FALSE FALSE FALSE FALSE FALSE
>> [2,] FALSE FALSE FALSE FALSE FALSE
>> [3,]  TRUE  TRUE FALSE  TRUE FALSE
>> [4,] FALSE FALSE FALSE FALSE FALSE
>> [5,]  TRUE FALSE FALSE FALSE FALSE
>>
>
>
> This suggests that 'sample' may be a matrix, not
> a dataframe.
>
> Anyway, try this on your original problem:
>
>
>  targets<-c(11,12,13,16,19,50,27,24,22,26)
>  mask<-apply(DF[,3:5],2, "%in%" ,targets)
>  is.na(DF[3:5]) <- !mask
>
>  -Peter Ehlers
>
>
>    mask<-data.frame(a=TRUE,b=TRUE,!mask)
>>   DF[mask]<-NA
>> Error in FUN(X[[1L]], ...) :
>>   only defined on a data frame with all numeric variables
>>   DF2<-data.frame(DF[,3:5])
>>   mask<-apply(sample,2,"%in%", target)
>>   mask<-data.frame(!mask)
>>   DF2[mask]<-NA
>> Error in FUN(X[[1L]], ...) :
>>   only defined on a data frame with all numeric variables
>>   DF2
>>    x2 x3 x4
>> 1  10 NA 20
>> 2  11 NA 21
>> 3  12 NA 22
>> 4  13 NA 23
>> 5  14 50 24
>> 6  15 NA 25
>> 7  16 NA 26
>> 8  17 NA 27
>> 9  18 NA 28
>> 10 19 NA 29
>>   mask<-apply(DF2,2,"%in%", target)
>>   mask<-data.frame(!mask)
>>   DF2[mask]<-NA
>> Error in FUN(X[[1L]], ...) :
>>   only defined on a data frame with all numeric variables
>>
>> On Tue, Jun 22, 2010 at 12:23 AM, Petr PIKAL<petr.pi...@precheza.cz>
>>  wrote:
>>
>>  Hi
>>>
>>> r-help-boun...@r-project.org napsal dne 22.06.2010 08:28:04:
>>>
>>>  The following dataframe will illustrate the problem
>>>>
>>>>
>>>>
>>>
>>> DF<-data.frame(name=rep(1:5,each=2),x1=rep("A",10),x2=seq(10,19,by=1),x3=rep
>>>
>>>> (NA,10),x4=seq(20,29,by=1))
>>>>  DF$x3[5]<-50
>>>>
>>>>  # we have a data frame. we are interested in the columns x2,x3,x4 which
>>>> contain sparse
>>>>  # values and many NA.
>>>>  DF
>>>>    name x1 x2 x3 x4
>>>> 1     1  A 10 NA 20
>>>> 2     1  A 11 NA 21
>>>> 3     2  A 12 NA 22
>>>> 4     2  A 13 NA 23
>>>> 5     3  A 14 50 24
>>>> 6     3  A 15 NA 25
>>>> 7     4  A 16 NA 26
>>>> 8     4  A 17 NA 27
>>>> 9     5  A 18 NA 28
>>>> 10    5  A 19 NA 29
>>>>
>>>> # we have a list of "target values that we want to search for in the
>>>>
>>> data
>>>
>>>> frame
>>>> # if the value is in the data frame we want to keep it there, otherwise,
>>>>  replace it with NA
>>>>
>>>> targets<-c(11,12,13,16,19,50,27,24,22,26)
>>>> # so we apply a test by column to the last 3 columns using the "in" test
>>>> # this gives us a mask of whether the data frame 'contains' elements in
>>>>
>>> the
>>>
>>>> # target list
>>>>
>>>> mask<-apply(DF[,3:5],2, "%in%" ,targets)
>>>> mask
>>>>
>>>>          x2    x3    x4
>>>>  [1,] FALSE FALSE FALSE
>>>>  [2,]  TRUE FALSE FALSE
>>>>  [3,]  TRUE FALSE  TRUE
>>>>  [4,]  TRUE FALSE FALSE
>>>>  [5,] FALSE  TRUE  TRUE
>>>>  [6,] FALSE FALSE FALSE
>>>>  [7,]  TRUE FALSE  TRUE
>>>>  [8,] FALSE FALSE  TRUE
>>>>  [9,] FALSE FALSE FALSE
>>>> [10,]  TRUE FALSE FALSE
>>>>
>>>> # and so DF[2,3] is equal to 11 and 11 is in the target list, so the
>>>>
>>> mask is
>>>
>>>> True
>>>> # now something like DF<- ifelse(mask==T,DF,NA) is CONCEPTUALLY what I
>>>>
>>> want
>>>
>>> Data frames are quite clever in preserving their dimensions. I would do
>>>
>>> mask=data.frame(a=TRUE, b=TRUE, !mask)
>>>
>>> to add column 1 and 2
>>>
>>> and
>>>
>>> DF[mask]<-NA
>>>
>>> Regards
>>> Petr
>>>
>>>
>>>  to do
>>>> in the end I'd  Like a result that looks like
>>>>
>>>>    name x1 x2 x3 x4
>>>> 1     1  A NA NA NA
>>>> 2     1  A 11 NA NA
>>>> 3     2  A 12 NA 22
>>>> 4     2  A 13 NANA
>>>> 5     3  A NA 50 24
>>>> 6     3  A NA NA NA
>>>> 7     4  A 16 NA 26
>>>> 8     4  A NA NA 27
>>>> 9     5  A NA NA NA
>>>> 10    5  A 19 NA NA
>>>>
>>>> Ive tried forcing the DF and the mask into vectors so that ifelse()
>>>>
>>> would
>>>
>>>> work
>>>> and have tried "apply" using ifelse.. without much luck. any thoughts?
>>>>
>>>>    [[alternative HTML version deleted]]
>>>>
>>>> ______________________________________________
>>>> R-help@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.
>>>>
>>>
>>>
>>>

        [[alternative HTML version deleted]]

______________________________________________
R-help@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.

Reply via email to