[R] Listing function displayed as a table
Adaikalavan Ramasamy
ramasamy at cancer.org.uk
Mon Mar 26 16:44:57 CEST 2007
Something ugly like this?
Lst <- list()
Lst[[1]] <- list(name="Fred", wife="Mary", no.children=3,
child.ages=c(4,7,9))
Lst[[2]] <- list(name="Barney", wife="Liz", no.children=2,
child.ages=c(3,5))
cbind( do.call("rbind", as.list(Lst))[ ,-4],
child.ages=sapply( Lst, function(myli)
paste(myli$child.ages, collapse=",") ))
Why don't you just save the data in a dataframe instead of a list to
begin with ? The only variable I can see that has multiple values is
child.ages. Or create one row per record as in most databases. The
choice depends on your input.
df <- rbind( c("Fred", "Mary", 4), c("Fred", "Mary", 7),
c("Fred", "Mary", 9), c("Barney", "Liz", 3),
c("Barney", "Liz", 5) )
df <- data.frame(df)
colnames(df) <- c("Father", "Mother", "Child.Age")
df$Child.Age <- as.numeric(as.character(df$Child.Age))
parents <- paste( df$Father, df$Mother, sep="+" )
getstats <- function(x) c( values=paste(x, collapse=","),
mean=round(mean(x),2), youngest=min(x), oldest=max(x) )
do.call( rbind, tapply( df$Child.Age, parents, getstats ) )
values mean youngest oldest
Barney+Liz "3,5" "4" "3" "5"
Fred+Mary "4,7,9" "6.67" "4" "9"
Regards, Adai
Schmitt, Corinna wrote:
> Hallo,
> good idea it is working. A new question appears: How can I display the entries in a table like
>
> name wife no.children child.ages
> Fred Mary 3 4,7,9
> Barney Liz 2 3,5
>
> Thanks, Corinna
>
>
> -----Ursprüngliche Nachricht-----
> Von: Michael T. Mader [mailto:m.mader at gsf.de]
> Gesendet: Montag, 26. März 2007 15:32
> An: Schmitt, Corinna; r-help at stat.math.ethz.ch
> Betreff: Re: [R] Listing function
>
> Lst <- list()
> Lst[[1]] <- list(name="Fred", wife="Mary", no.children=3,
> cild.ages=c(4,7,9))
> Lst[[2]] <- list(name="Barney", wife="Liz", no.children=2, cild.ages=c(3,5))
>
> I.e. a list of lists
>
> Regards
>
> Michael
>
> Schmitt, Corinna wrote:
>> Hallo,
>>
>> I build a list by the following way:
>>
>> Lst = list(name="Fred", wife="Mary", no.children=3, cild.ages=c(4,7,9))
>>
>> I know how I can extract the information one by one. But now I want to
>> add a new entry which looks like
>>
>> name="Barney", wife="Liz", no.children=2, cild.ages=c(3,5)
>>
>> How can I add this information to Lst without overwriting the first
>> entry?
>> How can I then extract the corresponding information if I have both
>> entries in Lst?
>>
>> Thanks for helping,
>>
>> Corinna
>>
>> ______________________________________________
>> R-help at stat.math.ethz.ch 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