Hi Josh,
Comments below.
Josh Roll wrote:
What you suggested works perfectly for the question i posed. Hoever,
on further inspection by additional numbers cannot be thrown out and
instead need to be added to the list somehow. I tried specifying the
list dimensions but that causes problems and doesnt fix my problem. The
procedure that creates the list below is referencing list accTAZ below
[1] 6476936.4 624214.8 2652368.4 536223.6 10255766.4
35486589.6 1443578.4
[8] 22289652.0 3857673.6 7682241.6 8546907.6 11657962.8
339332.4 3337567.2
against list VAC_ACRES:
TAZ VAC_ACRES
1 100 45043653.6
2 101 4471869.6
3 102 9579715.2
4 103 13336329.6
5 104 5841396.0
6 105 920858.4
7 106 15816200.4
8 107 14691481.2
9 108 21712046.4
10 109 18699436.8
and returning matching TAZ values resulting in TAZS. The code is as such:
for(j in 1:accTAZlength){
#Creates list of initially accepted TAZs by TAZ number
TAZS[[j]]=TAZ_VAC_FEET[TAZ_VAC_FEET$VAC_ACRES==accTAZ[j],1]
}
The issue is when a accTAZ value is referenced and multiple TAZ values
are returned for identical VAC_ACRES values which shouldnt occur but
does becasue of the existence of duplicate values. I now need to cross
reference the TAZS with an earlier list to make sure there are not TAZ
values present that shouldnt be but i cant figure out how to compare a
list with one column to one that in some places has 2-3 such as :
100 630
101 636
102 242, 534, 637
103 638
104 643
106 651, 801
107 654
Is there any way i can simply turn the list above from having 7 rows to
10 rows. Having the rows with multiple values just returned to the
bottom of the list?
Lists don't have rows, they have elements. In the case of TAZS, the
elements are vectors, each containing one or more values. You can
simplify this into a single vector of (all) values using 'unlist'. See
if this example helps:
> foo <- list(102, 100, c(104, 101), 103)
> foo
[[1]]
[1] 102
[[2]]
[1] 100
[[3]]
[1] 104 101
[[4]]
[1] 103
> unlist(foo)
[1] 102 100 104 101 103
This doesn't put the values from length>1 vectors at the end, but if you
really want that, you could do:
unlist(foo[order(sapply(foo, length))])
But taking a step back: if in the first place all you really want is a
vector of the TAZ values for which the associated VAC_ACRES value is
found in accTAZ, you don't need to do any of this stuff (including your
loop). Consider instead:
TAZ_VAC_FEET$TAZ[TAZ_VAC_FEET$VAC_ACRES %in% accTAZ]
Hope that helps,
Jim
Hope this is all clear. Thanks
Cheers,
JR
> Date: Tue, 28 Apr 2009 21:12:27 -0700
> From: reg...@nceas.ucsb.edu
> To: j_r...@hotmail.com
> CC: r-help@r-project.org
> Subject: Re: Re moving unwanted double values in list
>
> PDXRugger wrote:
> > I have a procedure that goes sorts out some numbers based on specidifed
> > criteria and for some reason the list contains double values in
some of the
> > rows such as:
> >
> > TAZs <-
> >
> > [[84]]
> > [1] 638
> >
> > [[85]]
> > [1] 643
> >
> > [[86]]
> > [1] 644 732
> >
> > [[87]]
> > [1] 651 801
> >
> > i would like to check list TAZs for double values and remove any if
present.
> > I have tried
> >
> > if (length(TAZDs==2))
> > rm(TAZDs[2])
> > but no luck. I cant find nor think of another way. Any help would be
> > helpful. Thanks in advance
> >
>
>
> Try this:
>
> TAZs[sapply(TAZs, length)!=2]
>
> Cheers,
> Jim
______________________________________________
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.