2015-02-25 4 views
1

У меня есть программа оболочки, чтобы сделать следующее, но я хотел попробовать свои силы в R, и я в тупике.Группировка и подсчет в R

Мой набор данных выглядит следующим образом:

<date>  <car>  <sale> 
2014-05-08 mercedes-450 40000 
2014-05-08 mercedes-350 30000 
2014-05-08 mercedes-350 30000 
2014-05-08 toyota corolla 20000 
2014-05-08 toyota camry 30000 
2014-05-09 mercedes-450 40000 
2014-05-09 mercedes-450 40000 

Я хотел бы, чтобы преобразовать это в 2-х кадров данных, по одному для мерседес и один для Тойота.

так и для мерседеса:

2014-05-08 mercedes 100000 
2014-05-09 mercedes 80000 

и Тойоты:

2014-05-08 toyota 50000 

мне нужно сделать это так, что я могу построить продажи для Тойоты и Мерседес на отдельных графики с датой по осям х и продажи на y.

Как создать два кадра данных? Я попытался ddply, но все это я получаю один след данных, который выглядит следующим образом

ddply(sales,c("date","car_type"),numcolwise(sum)) 

2014-05-08 mercedes-450 40000 
2014-05-08 mercedes-350 60000 
2014-05-08 toyota corolla 20000 

ответ

1
# sample data 
set.seed(1) 
df = data.frame(date = rep(as.Date(c("10jan1970", "11jan1970", "31mar1960", "30jul1960"), "%d%b%Y"), 2), 
       type = sample(1:2, 8, replace=T), 
       sales = rnorm(8)) 

# "aggreate()" to calculate your daily sales 
agg = aggregate(sales ~ date + type, data=df, FUN=sum) 

# "split()" the result by type if you want different data frames for each type 
tabs = split(agg, f=agg$type) 
tabs 

# $`1` 
#   date type  sales 
# 1 1970-01-10 1 0.9052891 
# 2 1970-01-11 1 -0.8204684 
# 
# $`2` 
#   date type  sales 
# 3 1960-03-31 2 1.9992102 
# 4 1960-07-30 2 1.1281679 
# 5 1970-01-11 2 -0.3053884 
1

нагрузки кадра данных:

df <- data.frame(
    date = c("2014-05-08","2014-05-08","2014-05-08","2014-05-08","2014-05-08","2014-05-09","2014-05-09"), 
    car = c("mercedes-450","mercedes-350","mercedes-350","toyota corolla","toyota camry","mercedes-450","mercedes-450"), 
    sale = c(40000,30000,30000,20000,30000,40000,40000),stringsAsFactors=FALSE) 

Создать новую переменную для автомобиля сделать расщеплением автомобильный переменный «-» и «»:

splitstring <- strsplit(df$car," |-") 
df$make <- unlist(lapply(splitstring,"[[",1)) 

Загрузите dplyr пакет, который мы будем использовать для расчета суммы сгруппированных:

library(dplyr) 

Вычислить сумму продаж по маркам, днем:

results <- df %>% 
    group_by(date,make) %>% 
    summarise(total_sales = sum(sale)) 

Теперь, если вы хотите по-разному диаграмму для каждого make, вы можете использовать make как переменную фасета в пакете типа ggplot2 и хранить свои данные в одной таблице. Но если вы хотите различные таблицы для каждого сделать:

tables <- split(results,results$make) 
0

ddply решение:

library(plyr) 

A<-df[grep("mercedes", df$car), ] 
B<-df[grep("toyota", df$car), ] 

ddply(A, .(date), summarize, val = sum(sale)) 
ddply(B, .(date), summarize, val = sum(sale)) 
Смежные вопросы