2017-01-27 45 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,'骨料(年〜城市+值,數據集,函數(X)C(年=的toString(X),numberOfObs =長度(X)))' –

回答

1

我們可以通過手術做一組,然後summarisepaste荷蘭國際集團的「年」在一起(toStringpaste(..., 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,year)' – Wilcar

+0

@Wilcar我更新了這篇文章。這只是創建一個序列列,以便這些行對於'spread'來說是唯一的以處理 – akrun

+1

偉大的工作@akrun – Wilcar