2017-01-27 8 views
1

Im, начинающийся с пакета dplyr/tidyr для обработки данных и изменения формы.данные для сбора данных: значения группировки и даты хранения

city <- c("Brest", "Brest", "Rennes", "Rennes", "Rennes") 
year<- c(2014, 2015, 2013, 2012, 2016) 
values <- c(100, 100, 110, 95, 95) 

# Création du data.frame 
dataset <- data.frame(city, year, values) 
dataset 

Вот мой набор данных:

city year value 
Brest 2014 100  
Brest 2015 100  
Rennes 2013 110  
Rennes 2012 95  
Rennes 2016 95 

Что я делаю:

demo <- dataset %>% 
    count(city, values) %>% 
    arrange(city) 

... и мои результаты:

city value n. of obs 
Brest 100  2  
Rennes 95  2  
Rennes 110  1 

То, что я ожидал, чтобы иметь :

Первый вариант:

city value n. of obs  year 
    Brest  100  2   2014, 2015 
    Rennes 95  2   2012, 2016 
    Rennes 110  1   2013 

Второй вариант:

city value n. of obs year1 year 2 
    Brest  100  2  2014  2015 
    Rennes 95  2  2012  2016 
    Rennes 110  1  2013 

Могу ли я сделать это с добавлением мутируют в моей трубе?

Благодарим Вас за помощь

+0

С базой R, 'агрегатный (год ~ город + значения, набор данных, функция (х) с (год = ToString (х), numberOfObs = длина (х)))' –

ответ

1

Мы можем сделать группу по работе, а затем summarise по paste ING в «год» вместе (toString является оболочкой для paste(..., collapse=", "))

dataset %>% 
     group_by(city, values) %>% 
     summarise(n = n(), year = toString(year)) 

Или, если мы хотим второй вариант, после операции по группе, создайте число строк (n()) и столбец последовательностей на paste, введя строку «год» с помощью row_number(), а затем выполните spread, чтобы преобразовать его в «широкий» формат

dataset %>% 
    group_by(city, values) %>% 
    mutate(n = n(), i1 = paste0("year", row_number())) %>% 
    spread(i1, year) 
+0

Он отлично работает, но не полностью понять 'i1 = paste0 (" year ", row_number()))%>% spread (i1, год)' – Wilcar

+0

@Wilcar Я обновил сообщение. Это просто создать столбец последовательности, чтобы строки были уникальными для 'spread' для обработки – akrun

+1

Отличная работа @akrun – Wilcar