You will have to change the 'i1' expression as follows:

> i1 <- grepl("^([0D]|[0d])*$", dd$ch)
> i1  # matches strings with d & D in them
 [1]  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> # second string had 'd' & 'D' in it so it was TRUE above and FALSE below
> i1new <- grepl("^([0D]*$|[0d]*$)", dd$ch)
> i1new
 [1]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
>
>

I put a 'd' and 'D' in the second string and the original regular
expression is equivalent to

grepl("^[0dD]*$", dd$ch)

which will match strings containing d, D and 0.  If you only want 'd'
or 'D' (and not both), then you will have to use the one in 'i1new'.

On Mon, Jul 2, 2012 at 7:24 PM, Rui Barradas <ruipbarra...@sapo.pt> wrote:
> Hello,
>
> Try regular expressions instead.
> In this data.frame, I've changed row nr.4 to have a row with 'D' as first
> non-zero character.
>
> dd <- read.table(text="
>
> ch     count
> 1  0000000000D0000000000000000000000000000000000000 0.007368
> 2  0000000000d0000000000000000000000000000000000000 0.002456
> 3  000000000T00000000000000000000000000000000000000 0.007368
> 4  000000000DT0000000000000000000000000000000000000 0.007368
>
> 5  000000000T00000000000000000000000000000000000000 0.002456
> 6  000000000Td0000000000000000000000000000000000000 0.002456
> 7  00000000T000000000000000000000000000000000000000 0.007368
> 8  00000000T0D0000000000000000000000000000000000000 0.007368
> 9  00000000T000000000000000000000000000000000000000 0.002456
> 10 00000000T0d0000000000000000000000000000000000000 0.002456
> ", header=TRUE)
> dd
>
> i1 <- grepl("^([0D]|[0d])*$", dd$ch)
> i2 <- grepl("^0*[Dd]", dd$ch)
>
> dd[!i1, ]
> dd[!i2, ]
> dd[!(i1 | i2), ]
>
>
> Hope this helps,
>
> Rui Barradas
>
> Em 02-07-2012 23:48, Claudia Penaloza escreveu:
>
>> I would like to remove rows from the following data frame (df) if there
>> are
>> only two specific elements found in the df$ch character string (I want to
>> remove rows with only "0" & "D" or "0" & "d"). Alternatively, I would like
>> to remove rows if the first non-zero element is "D" or "d".
>>
>>
>>                                                   ch     count
>> 1  0000000000D0000000000000000000000000000000000000 0.007368;
>> 2  0000000000d0000000000000000000000000000000000000 0.002456;
>> 3  000000000T00000000000000000000000000000000000000 0.007368;
>> 4  000000000TD0000000000000000000000000000000000000 0.007368;
>> 5  000000000T00000000000000000000000000000000000000 0.002456;
>> 6  000000000Td0000000000000000000000000000000000000 0.002456;
>> 7  00000000T000000000000000000000000000000000000000 0.007368;
>> 8  00000000T0D0000000000000000000000000000000000000 0.007368;
>> 9  00000000T000000000000000000000000000000000000000 0.002456;
>> 10 00000000T0d0000000000000000000000000000000000000 0.002456;
>>
>>
>> I tried the following but it doesn't work if there is more than one
>> character per string:
>>
>>> df <- df[!df$ch %in% c("0","D"),]
>>> df <- df[!df$ch %in% c("0","d"),]
>>
>>
>> Any help greatly appreciated,
>> Claudia
>>
>>         [[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.
>>
>
> ______________________________________________
> 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.



-- 
Jim Holtman
Data Munger Guru

What is the problem that you are trying to solve?
Tell me what you want to do, not how you want to do it.

______________________________________________
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