CS Sparks
2011-Jun-24 13:55 UTC
[R] Fwd: Extract element of a list based on an index value
> Dear list, > > I have some data on a geneaology, here is a subset: > warmerge[1:11,c(1,6,25)] > Warrior SibID birth.year > 1100 3793 2013 1926 > 4 2013 2024 1934 > 1094 3769 2024 1918 > 632 2747 2037 1928 > 176 2083 2039 1944 > 187 2085 2039 1949 > 192 2086 2039 NA > 495 2556 2039 1940 > 71 2050 2040 1950 > 343 2158 2040 1926 > 930 3045 2040 1948 > > I have then extracted the lowest birth.year for each SibID using: > > br<-tapply(warmerge$birth.year,warmerge$SibID,which.min) > > br[1:5] > $`2013` > [1] 1 > > $`2024` > [1] 2 > > $`2037` > [1] 1 > > $`2039` > [1] 4 > > $`2040` > [1] 2 > > > My goal now is to extract out the value of Warrior that corresponds > to this index value > > I've been trying to extract out the actual value of the list > corresponding to the index value, so for example, the fourth value > of SibID I would like to return > > 2556 > > and for the fifth value of SibID I would like > > 2158 > > as these correspond to the index value. This wouldn't be so bad if > it were 5 geneologies, but there are hundreds. I've been fighting > with lapply() and sapply() to to avail, for instance I can turn the > geneaology into a list using: > > crap2<-tapply(warmerge$Warrior, warmerge$SibID, "[") > > crap2[1:5] > $`2013` > [1] 3793 > > $`2024` > [1] 2013 3769 > > $`2037` > [1] 2747 > > $`2039` > [1] 2083 2085 2086 2556 > > $`2040` > [1] 2050 2158 3045 > > lapply(crap2[1:5], "[", i=1) > $`2013` > [1] 3793 > > $`2024` > [1] 2013 > > $`2037` > [1] 2747 > > $`2039` > [1] 2083 > > $`2040` > [1] 2050 > > gives me the first element of each list, but my question is how > could I get something like this for a non-fixed i corresponding to > my index? > > Any suggestions would be greatly appreciated. > > Best, > Corey > > > Corey Sparks > Assistant Professor > Department of Demography > College of Public Policy > 501 West Durango Blvd > Monterrey Building 2.270C > San Antonio, TX 78207 > corey.sparks 'at' utsa.edu > 210 458 3166 > Latitude: 29.423614 / Longitude: -98.504282 >
Corey Sparks
2011-Jun-24 14:54 UTC
[R] Fwd: Extract element of a list based on an index value
Solved it: oldest<-unlist(tapply(warmerge$birth.year, warmerge$SibID,function(x) ifelse (x==min(x, na.rm=T)|is.na(x)==T,1,0))) ----- Corey Sparks, PhD Assistant Professor Department of Demography and Organization Studies University of Texas at San Antonio 501 West Durango Blvd Monterey Building 2.270C San Antonio, TX 78207 210-458-3166 corey.sparks 'at' utsa.edu https://rowdyspace.utsa.edu/users/ozd504/www/index.htm -- View this message in context: http://r.789695.n4.nabble.com/Fwd-Extract-element-of-a-list-based-on-an-index-value-tp3622601p3622714.html Sent from the R help mailing list archive at Nabble.com.
John Kane
2011-Jun-24 15:09 UTC
[R] Fwd: Extract element of a list based on an index value
Is this doing what you want? It's going from the raw data not the list
==================================================================
library(reshape2)
# sample data.frame
xx <-structure(list(Warrior = c(3793L, 2013L, 3769L, 2747L, 2083L,
2085L, 2086L, 2556L, 2050L, 2158L, 3045L), SibID = c(2013L, 2024L,
2024L, 2037L, 2039L, 2039L, 2039L, 2039L, 2040L, 2040L, 2040L
), birth.year = c(1926L, 1934L, 1918L, 1928L, 1944L, 1949L, NA,
1940L, 1950L, 1926L, 1948L)), .Names = c("Warrior", "SibID",
"birth.year"), class = "data.frame", row.names =
c("1100", "4",
"1094", "632", "176", "187",
"192", "495", "71", "343",
"930"
))
(d1 <-melt(xx, id= c("SibID")))
dcast(d1, SibID ~ variable, min)
-----------------------------------------------------------------------
--- On Fri, 6/24/11, CS Sparks <corey.sparks at utsa.edu> wrote:
> From: CS Sparks <corey.sparks at utsa.edu>
> Subject: [R] Fwd: Extract element of a list based on an index value
> To: "R Help Help" <r-help at r-project.org>
> Received: Friday, June 24, 2011, 9:55 AM
> > Dear list,
> >
> > I have some data on a geneaology, here is a subset:
> > warmerge[1:11,c(1,6,25)]
> >? ???Warrior SibID birth.year
> > 1100? ? 3793? 2013? ?
> ???1926
> > 4? ? ???2013? 2024?
> ? ???1934
> > 1094? ? 3769? 2024? ?
> ???1918
> > 632? ???2747? 2037?
> ? ???1928
> > 176? ???2083? 2039?
> ? ???1944
> > 187? ???2085? 2039?
> ? ???1949
> > 192? ???2086? 2039?
> ? ? ???NA
> > 495? ???2556? 2039?
> ? ???1940
> > 71? ? ? 2050? 2040? ?
> ???1950
> > 343? ???2158? 2040?
> ? ???1926
> > 930? ???3045? 2040?
> ? ???1948
> >
> > I have then extracted the lowest birth.year for each
> SibID using:
> >
> >
> br<-tapply(warmerge$birth.year,warmerge$SibID,which.min)
> >
> > br[1:5]
> > $`2013`
> > [1] 1
> >
> > $`2024`
> > [1] 2
> >
> > $`2037`
> > [1] 1
> >
> > $`2039`
> > [1] 4
> >
> > $`2040`
> > [1] 2
> >
> >
> > My goal now is to extract out the value of Warrior
> that corresponds?
> > to this index value
> >
> > I've been trying to extract out the actual value of
> the list?
> > corresponding to the index value, so for example, the
> fourth value?
> > of SibID I would like to return
> >
> > 2556
> >
> > and for the fifth value of SibID I would like
> >
> > 2158
> >
> > as these correspond to the index value. This wouldn't
> be so bad if?
> > it were 5 geneologies, but there are hundreds. I've
> been fighting?
> > with lapply() and sapply() to to avail, for instance I
> can turn the?
> > geneaology into a list using:
> >
> > crap2<-tapply(warmerge$Warrior, warmerge$SibID,
> "[")
> >
> > crap2[1:5]
> > $`2013`
> > [1] 3793
> >
> > $`2024`
> > [1] 2013 3769
> >
> > $`2037`
> > [1] 2747
> >
> > $`2039`
> > [1] 2083 2085 2086 2556
> >
> > $`2040`
> > [1] 2050 2158 3045
> >
> > lapply(crap2[1:5], "[", i=1)
> > $`2013`
> > [1] 3793
> >
> > $`2024`
> > [1] 2013
> >
> > $`2037`
> > [1] 2747
> >
> > $`2039`
> > [1] 2083
> >
> > $`2040`
> > [1] 2050
> >
> > gives me the first element of each list, but my
> question is how?
> > could I get something like this for a non-fixed i
> corresponding to?
> > my index?
> >
> > Any suggestions would be greatly appreciated.
> >
> > Best,
> > Corey
> >
> >
> > Corey Sparks
> > Assistant Professor
> > Department of Demography
> > College of Public Policy
> > 501 West Durango Blvd
> > Monterrey Building 2.270C
> > San Antonio, TX 78207
> > corey.sparks 'at' utsa.edu
> > 210 458 3166
> > Latitude: 29.423614? /? Longitude:
> -98.504282
> >
>
> ______________________________________________
> 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.
>
John Kane
2011-Jun-24 15:10 UTC
[R] Fwd: Extract element of a list based on an index value
Is this doing what you want? It's going from the raw data not the list
==================================================================
library(reshape2)
# sample data.frame
xx <-structure(list(Warrior = c(3793L, 2013L, 3769L, 2747L, 2083L,
2085L, 2086L, 2556L, 2050L, 2158L, 3045L), SibID = c(2013L, 2024L,
2024L, 2037L, 2039L, 2039L, 2039L, 2039L, 2040L, 2040L, 2040L
), birth.year = c(1926L, 1934L, 1918L, 1928L, 1944L, 1949L, NA,
1940L, 1950L, 1926L, 1948L)), .Names = c("Warrior", "SibID",
"birth.year"), class = "data.frame", row.names =
c("1100", "4",
"1094", "632", "176", "187",
"192", "495", "71", "343",
"930"
))
(d1 <-melt(xx, id= c("SibID")))
dcast(d1, SibID ~ variable, min)
-----------------------------------------------------------------------
--- On Fri, 6/24/11, CS Sparks <corey.sparks at utsa.edu> wrote:
> From: CS Sparks <corey.sparks at utsa.edu>
> Subject: [R] Fwd: Extract element of a list based on an index value
> To: "R Help Help" <r-help at r-project.org>
> Received: Friday, June 24, 2011, 9:55 AM
> > Dear list,
> >
> > I have some data on a geneaology, here is a subset:
> > warmerge[1:11,c(1,6,25)]
> >? ???Warrior SibID birth.year
> > 1100? ? 3793? 2013? ?
> ???1926
> > 4? ? ???2013? 2024?
> ? ???1934
> > 1094? ? 3769? 2024? ?
> ???1918
> > 632? ???2747? 2037?
> ? ???1928
> > 176? ???2083? 2039?
> ? ???1944
> > 187? ???2085? 2039?
> ? ???1949
> > 192? ???2086? 2039?
> ? ? ???NA
> > 495? ???2556? 2039?
> ? ???1940
> > 71? ? ? 2050? 2040? ?
> ???1950
> > 343? ???2158? 2040?
> ? ???1926
> > 930? ???3045? 2040?
> ? ???1948
> >
> > I have then extracted the lowest birth.year for each
> SibID using:
> >
> >
> br<-tapply(warmerge$birth.year,warmerge$SibID,which.min)
> >
> > br[1:5]
> > $`2013`
> > [1] 1
> >
> > $`2024`
> > [1] 2
> >
> > $`2037`
> > [1] 1
> >
> > $`2039`
> > [1] 4
> >
> > $`2040`
> > [1] 2
> >
> >
> > My goal now is to extract out the value of Warrior
> that corresponds?
> > to this index value
> >
> > I've been trying to extract out the actual value of
> the list?
> > corresponding to the index value, so for example, the
> fourth value?
> > of SibID I would like to return
> >
> > 2556
> >
> > and for the fifth value of SibID I would like
> >
> > 2158
> >
> > as these correspond to the index value. This wouldn't
> be so bad if?
> > it were 5 geneologies, but there are hundreds. I've
> been fighting?
> > with lapply() and sapply() to to avail, for instance I
> can turn the?
> > geneaology into a list using:
> >
> > crap2<-tapply(warmerge$Warrior, warmerge$SibID,
> "[")
> >
> > crap2[1:5]
> > $`2013`
> > [1] 3793
> >
> > $`2024`
> > [1] 2013 3769
> >
> > $`2037`
> > [1] 2747
> >
> > $`2039`
> > [1] 2083 2085 2086 2556
> >
> > $`2040`
> > [1] 2050 2158 3045
> >
> > lapply(crap2[1:5], "[", i=1)
> > $`2013`
> > [1] 3793
> >
> > $`2024`
> > [1] 2013
> >
> > $`2037`
> > [1] 2747
> >
> > $`2039`
> > [1] 2083
> >
> > $`2040`
>%2