[R] How to make Pivot table with two variables in R?

Chel Hee Lee chl948 at mail.usask.ca
Sat Dec 20 07:09:21 CET 2014


 > x <- dat
 > x$time <- as.factor(as.Date(x$time, format="%Y-%B%d"))
 > tmp <- split(x, x$tag)
 > tmp1 <- do.call(rbind, lapply(tmp, function(x){
+ tb <- table(x$time)
+  idx <- which(tb>0)
+  tb1 <- replace(tb, idx, as.character(x$states))
+ }))
 > print(tmp1, quote=FALSE)
    2010-05-27 2011-06-27 2011-06-28 2012-06-25 2013-06-21 2014-01-05 
2014-07-27
x1 A          B          B          0          0          0          0 

x2 A          0          0          0          0          0          0 

x3 0          0          0          D          0          0          0 

x4 0          0          0          0          C          0          0 

x5 0          0          0          0          B          0          0 

x6 0          0          0          0          Out        0          0 

x7 0          0          0          C          0          0          Out 

x8 0          0          0          0          0          B          0 

    2015-04-07
x1 0
x2 0
x3 0
x4 0
x5 0
x6 A
x7 0
x8 0
 >

Is this what you are looking for?  I hope this helps.

Chel Hee Lee


On 12/19/2014 10:45 PM, Kristi Glover wrote:
> Hi R User, Would you suggest me on how I can build a pivot table using two variables? I want to put "text" in the table instead of value.  I have attached an example data and the type of table (FinalTable) I was looking for. I am looking for your suggestions. ThanksKG=====dat<-structure(list(tag = structure(c(1L, 1L, 1L, 2L, 3L, 4L, 5L, 6L, 6L, 7L, 7L, 8L), .Label = c("x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8"), class = "factor"), time = structure(c(1L, 2L, 3L, 1L, 4L, 5L, 5L, 5L, 8L, 4L, 7L, 6L), .Label = c("2010-May 27", "2011-June 27", "2011-June 28", "2012-June 25", "2013-June 21", "2014-Jan 05", "2014-July 27", "2015-April 07"), class = "factor"),     states = structure(c(1L, 2L, 2L, 1L, 4L, 3L, 2L, 5L, 1L,     3L, 5L, 2L), .Label = c("A", "B", "C", "D", "Out"), class = "factor")), .Names = c("tag", "time", "states"), class = "data.frame", row.names = c(NA, -12L))
> dat###table(dat$tag,dat$time)# it gives value but I want the name of the states in the table instead of value.#For examplefinalTable<-structure(list(tag = structure(1:8, .Label = c("x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8"), class = "factor"), X2010.May.27 = structure(c(2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("0", "A"), class = "factor"),     X2011.June.27 = structure(c(2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L    ), .Label = c("0", "B"), class = "factor"), X2011.June.28 = structure(c(2L,     1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("0", "B"), class = "factor"),     X2012.June.25 = structure(c(1L, 1L, 3L, 1L, 1L, 1L, 2L, 1L    ), .Label = c("0", "C", "D"), class = "factor"), X2013.June.21 = structure(c(1L,     1L, 1L, 3L, 2L, 4L, 1L, 1L), .Label = c("0", "B", "C", "Out"    ), class = "factor"), X2014.Jan.05 = structure(c(1L, 1L,     1L, 1L, 1L, 1L, 1L, 2L), .Label = c("0", "B"), class = "factor"),     X2014.July.27 = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L    ), .Label = c("!
>   0", "Out"), class = "factor"), X2015.April.07 = c(0L,     0L, 0L, 0L, 0L, 1L, 0L, 0L)), .Names = c("tag", "X2010.May.27", "X2011.June.27", "X2011.June.28", "X2012.June.25", "X2013.June.21", "X2014.Jan.05", "X2014.July.27", "X2015.April.07"), class = "data.frame", row.names = c(NA,-8L))
> finalTable
> #How is it possible to get the finalTable as shown above?Any suggestions? 		 	   		
> 	[[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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