R 101: Summarizing Data

[This article was first published on Mathew Analytics » R, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

When working with large amounts of data that is structured in a tabular format, a common operation is to summarize that data in different ways using specific variables. In Microsoft Excel, pivot tables are a nice feature that is used for this purpose. While not as “efficient” in relation to Excel pivot tables, R also has similar calculations that can be used to summarize large amount of data. In the following R code, I utilize R to summarize a data frame by specific variables.

## CREATE DATA
 
dat = data.frame(
  name=c("Tony","James","Sara","Alice","David","Angie","Don","Faith","Becky","Jenny",
         "Kristi","Neil","Brandon","Kara","Kendra","Liz","Gina","Amber","Alice","George"),
  state=c("KS","IA","CA","FL","MI","CO","KA","CO","KS","CA","MN","FL","NM","MS","GA",
          "IA","IL","ID","NY","NJ"),
  gender=c("M","M","F","F","F","M","F","M","F","F","F","M","M","F","F","F","F","F","F","M"),
  marital_status=c("M","S","S","S","M","M","S","M","S","M","M","S","S","S","M","M","S","M","S","M"),
  credit=c("good","good","poor","fair","poor","fair","fair","fair","good","fair",
           "good","good","poor","fair","poor","fair","fair","fair","good","fair"),
  owns_home=c(0,1,0,0,1,0,1,1,1,1,0,1,0,0,1,0,1,1,1,1),
  cost=c(500,200,300,150,200,300,400,450,250,150,500,200,300,150,200,300,400,450,250,150))
## AGGREGATE FUNCTION FROM BASE R
aggregate(cost ~ marital_status, data=dat, FUN=mean)
aggregate(cost ~ marital_status + gender, data=dat, FUN=mean)
aggregate(cost ~ marital_status + credit + gender, data=dat, FUN=mean)
 
## SUMMARY BY IN DOBY:
library(doBy)
summaryBy(cost ~ marital_status, data=dat, FUN=c(mean, sd))
summaryBy(cost ~ gender, data=dat, FUN=c(mean, sd))
summaryBy(cost ~ credit, data=dat, FUN=c(mean, sd))
 
## DDPLY IN PLYR
library(plyr)
ddply(dat, .(credit), "nrow")
ddply(dat, .(credit, gender), "nrow")
ddply(dat, .(marital_status), summarise, avg=mean(cost))
ddply(dat, .(marital_status, gender), summarise, avg=mean(cost))
ddply(dat, .(marital_status, gender, credit), summarise, avg=mean(cost))
 
## DPLYR PACKAGE
library(dplyr)
Good = filter(dat, credit=="good")
Good
arrange(Good, desc(cost))
select(Good, owns_home, cost)
mutate(Good, New_Value=cost/5)
by.type <- group_by(Good, gender)
summarise(by.type, num.types = n(), counts = sum(cost))
 
## SQLDF PACKAGE
library(sqldf)
sqldf("SELECT gender, COUNT(*) FROM dat GROUP BY gender")
sqldf("SELECT gender, credit, COUNT(*) FROM dat GROUP BY gender, credit")
sqldf("SELECT gender, credit, COUNT(*), AVG(cost) FROM dat GROUP BY gender, credit")

 

To leave a comment for the author, please follow the link and comment on their blog: Mathew Analytics » R.

R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

Never miss an update!
Subscribe to R-bloggers to receive
e-mails with the latest R posts.
(You will not see this message again.)

Click here to close (This popup will not appear again)