user1471980
user1471980

Reputation: 10626

how do you create a data frame from an existing data frame with summary

I am trying to create to separate data frames what will include Avg, Max and 95th percentile fo the data by Hostname.

  1. for the Cpubusy and 2. for the UsedPercentMemory

The data frame would look something like this:

Hostname   Avg   Max 95th Percentile
Web01      10     90    92
Web02      5      80    75

dput(d)



structure(list(Hostname = structure(c(8L, 8L, 9L, 5L, 6L, 7L, 
1L, 2L, 3L, 4L), .Label = c("db01", "db02", "farm01", "farm02", 
"tom01", "tom02", "tom03", "web01", "web03"), class = "factor"), 
    Date = structure(c(6L, 10L, 5L, 3L, 2L, 1L, 8L, 9L, 7L, 4L
    ), .Label = c("10/5/2015 1:15", "10/5/2015 1:30", "10/5/2015 2:15", 
    "10/5/2015 4:30", "10/5/2015 8:30", "10/5/2015 8:45", "10/6/2015 8:15", 
    "10/6/2015 8:30", "9/11/2015 5:00", "9/11/2015 6:00"), class = "factor"), 
    Cpubusy = c(31L, 20L, 30L, 20L, 18L, 20L, 41L, 21L, 29L, 
    24L), UsedPercentMemory = c(99L, 98L, 95L, 99L, 99L, 99L, 
    99L, 98L, 63L, 99L)), .Names = c("Hostname", "Date", "Cpubusy", 
"UsedPercentMemory"), class = "data.frame", row.names = c(NA, 
-10L))

Is there an easy way to do this in r, I am trying to avoid loops.

I tried this:

dd %>% group_by(Hostname) %>% summarise_each(funs(mean, max))

I cannot figure out 95th percentile.

Upvotes: 0

Views: 33

Answers (1)

akrun
akrun

Reputation: 887068

Not sure if this is the efficient way

library(dplyr)
library(lazyeval)
dd %>% 
   group_by(Hostname) %>% 
   summarise_(Mean = interp(~mean(var, na.rm=TRUE), var=as.name(m)), 
              Max=interp(~max(var, na.rm=TRUE), var=as.name(m)), 
              Quantile= interp(~quantile(var, prob=0.95), var=as.name(m)))

Upvotes: 1

Related Questions