[R] reshape a dataset

sohail13@gmail.com sohail13 at gmail.com
Fri Aug 15 18:06:51 CEST 2014


Great! Thanks

Sent from my LG G Flex, an AT&T 4G LTE smartphone


------ Original message------
From: Jorge I Velez
Date: Fri, Aug 15, 2014 8:54 AM
To: Sohail Khan;
Cc: Jim Lemon;R Help;
Subject:Re: [R] reshape a dataset

If that's the case, you could do the following:

d <- with(skdat, table(ID, lettertag))
d <- data.frame(cbind(ID = rownames(d), d))
rownames(d) <- NULL
d

HTH,
Jorge.-




On Fri, Aug 15, 2014 at 8:22 PM, Sohail Khan <sohail13 at gmail.com> wrote:
Thanks Jim and Jorge,
Clever solutions, the final output is a list.
How do I covert it back a dataframe?
-Sohail


On Fri, Aug 15, 2014 at 5:37 AM, Jorge I Velez <jorgeivanvelez at gmail.com> wrote:
Dear Sohail,

Using Jim's data set skdat, two more options would be

# first option
d <- with(skdat, table(ID, lettertag))
names <- colnames(d)
d <- c(list(rownames(d)), lapply(1:ncol(d), function(i) as.numeric(d[,i])))
names(d) <- c('ID', names)
d

# second option
d <- with(skdat, table(ID, lettertag))
res <- c(list(rownames(d)), sapply(apply(d, 2, list), "[", 1))
names(res)[1] <- "ID"
res

HTH,
Jorge.-



On Fri, Aug 15, 2014 at 7:19 PM, Jim Lemon <jim at bitwrit.com.au> wrote:

> On Thu, 14 Aug 2014 06:08:51 PM Sohail Khan wrote:
> > Hi
> > I have data set as follows:
> >   A 92315  A 35018  A 56710  B 52700  B 92315  B 15135  C 35018  C
> 52700
> > I would like to transform this data set into:
> >   ID 92315 35018 56710 52700 15135  A 1 1 1 0 0  B 1 0 0 1 1  C 0 1 0
> 1 0
> > I looked into reshape package to no avail.
> > I would appreciate any suggestions.
> >
> > -Sohail
> >
> Hi Sohail,
> You are doing a bit more than reshaping. This may get you there:
>
> skdat<-read.table(text="A 92315
> A 35018
> A 56710
> B 52700
> B 92315
> B 15135
> C 35018
> C 52700",stringsAsFactors=FALSE)
> names(skdat)<-c("lettertag","ID")
> ID<-unique(skdat$ID)
> lettertags<-unique(skdat$lettertag)
> newskdat<-list(ID)
> for(i in 1:length(lettertags))
>  newskdat[[i+1]]<-
>   as.numeric(ID %in% skdat$ID[skdat$lettertag==lettertags[i]])
> names(newskdat)<-c("ID",lettertags)
>
> I'm assuming that you don't really want your answer as a single string.
>
> Jim
>
> ______________________________________________
> 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.
>

        [[alternative HTML version deleted]]


______________________________________________
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.



	[[alternative HTML version deleted]]



More information about the R-help mailing list