[R] obtaining a true/false vector with combination of strsplit, length, unlist,

Phil Spector spector at stat.berkeley.edu
Sat Feb 11 23:00:04 CET 2012


It sounds like the problem boils down to counting the number
of "_"s in the WELLID variable, and seeing if there are two:

> nchar(gsub('[^_]','',edm$WELLID)) == 2
[1] FALSE FALSE  TRUE  TRUE  TRUE  TRUE FALSE

 					- Phil Spector
 					 Statistical Computing Facility
 					 Department of Statistics
 					 UC Berkeley
 					 spector at stat.berkeley.edu



On Sat, 11 Feb 2012, emorway wrote:

> Hi,
>
> A pared down version of the dataset I'm working with:
>
> edm<-read.table(textConnection("WELLID        X_GRID Y_GRID LAYER ROW COLUMN
> SPECIES CALCULATED     OBSERVED
> w301_3          4428.       1389     2   6     18       1       3558
> 6490.
> w304_12         4836.       6627     2  27     20       1       3509
> 3228.
> 02_10_12080    3.6125E+04  13875     1  56    145       1       2774
> -999.0
> 02_10_12080    3.6125E+04  13875     1  56    145       1       2774
> -999.0
> 02_10_12081    3.6375E+04  13875     1  56    146       1       3493
> -999.0
> 02_10_12092    3.9125E+04  13875     1  56    157       1       4736
> -999.0
> w305_12         2962.       7326     2  30     12       1       4575
> 5899."),header=T)
> closeAllConnections()
>
> I'm having a hard time coming up with the R code that would produce a
> TRUE/FALSE vector based on whether or not the first column of the data.frame
> "edm" has a length of 2 or 3?  To show what I mean going row-by-row, I could
> do the following:
>
>> length(strsplit(as.character(edm$WELLID),"_")[[1]])==3
> [1] FALSE
>> length(strsplit(as.character(edm$WELLID),"_")[[2]])==3
> [1] FALSE
>> length(strsplit(as.character(edm$WELLID),"_")[[3]])==3
> [1] TRUE
>> length(strsplit(as.character(edm$WELLID),"_")[[4]])==3
> [1] TRUE
>> length(strsplit(as.character(edm$WELLID),"_")[[5]])==3
> [1] TRUE
>> length(strsplit(as.character(edm$WELLID),"_")[[6]])==3
> [1] TRUE
>> length(strsplit(as.character(edm$WELLID),"_")[[7]])==3
> [1] FALSE
>
> I've fumbled around trying to come up with a line of R code that would
> create a vector that looks like:  "FALSE FALSE TRUE TRUE TRUE TRUE FALSE"
>
> The final goal is to use this vector to create two new data.frames, where,
> for example, the first contains all the rows of edm in which the first
> column has a length of 2 when split using a "_" character.  The second
> data.frame would contain all the rows in which the first column has a length
> of 3 when split using a "_" character.
>
> Thanks,
> Eric
>
> --
> View this message in context: http://r.789695.n4.nabble.com/obtaining-a-true-false-vector-with-combination-of-strsplit-length-unlist-tp4380050p4380050.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> 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