[R] Delete rows from data.frame matching a certain criteria

David Winsemius dwinsemius at comcast.net
Thu Mar 1 19:13:30 CET 2012


On Mar 1, 2012, at 1:02 PM, Sarah Goslee wrote:

> You're all correct: I copied in the wrong thing. My apologies!
>
> On Thu, Mar 1, 2012 at 1:00 PM, Ista Zahn <istazahn at gmail.com> wrote:
>> Hi,
>>
>> On Mar 1, 2012, at 12:38 PM, Sarah Goslee wrote:
>>
>>> Hi,
>>>
>>> On Thu, Mar 1, 2012 at 11:11 AM, mails <mails00000 at gmail.com> wrote:
>>>> Hello,
>>>>
>>>>
>>>> consider the following data.frame:
>>>>
>>>> test <- data.frame(n = c(1,2,3,4,5), v = c(6,5,7,5,3), pattern =
>>>> c(1,1,NA,1,NA))
>>>>
>>
>> < snip >
>>
>>>> So basically the result should look like this:
>>>>> test
>>>>  n v pattern
>>>> 1  1     NA       1
>>>> 2  2     NA      1
>>>> 3  3     7      NA
>>>> 4  4     NA       1
>>>> 5  5     3      NA
>>>
>>>> So far, I solved it by creating subsets and using merge but it  
>>>> turns out to
>>>> be super slow. Is there a way to do that
>>>> with the apply function?
>>>
>>> Far too much work. What about:
>>>
>>>> test$v <- ifelse(test$pattern == 1, NA, v)
>>>> test
>>>  n  v pattern
>>> 1 1 NA       1
>>> 2 2 NA       1
>>> 3 3 NA      NA
>>> 4 4 NA       1
>>> 5 5 NA      NA
>>
>> Actually that doesn't work because of those pesky missing values.  
>> You need
>>
>> test <-  transform(test, v = ifelse(pattern == 1 & !is.na(pattern),  
>> NA, v))


What about just using `is.na<-`:

is.na(test$v) <- test$pattern==1



-- 
David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list