2017-10-06 52 views
1

我的數據看起來是這樣的(雖然有成千上萬的樣品點以上〜12歲:如何在製作彙總表時使用特定值(使用summarize_all)?

library(tidyverse) 
df <- tribble(~Year, ~Sample, ~Total_A, ~Total_B, ~Total_C, 
      2000, 'Riverside', 990, 08, NA, 
      2000, 'Pasadena', 887, 101, 78, 
      2000, 'Goleta', 786, NA, NA, 
      2001, 'Riverside', 985, 89, 21, 
      2001, 'Pasadena', 992, 67, 33, 
      2002, 'Riverside', 991, 21, 09, 
      2002, 'Goleta', 351, 34, NA, 
      2002, 'Scottsdale', 345, NA, 75) 

我已經使用匯總所有(下)得到以下彙總數據表

library(dplyr) 
    df1 <- df %>% 
    group_by(Sample) %>% 
    summarize_all(funs(sum(!is.na(.)))) 

Sample, Total_A, Total_B, Total_C 
Riverside, 3, 3, 2 
Pasadena, 2, 2, 2 
Goleta, 2, 1, 0 
Scottsdale, 1, 0, 1 

我想添加一個列到數據表中,每個樣本可以提供每年可用的數據。是否有無論如何我可以使用summarize_all(或任何其他彙總命令?)做到這一點我想也許使用一些東西「粘貼獨特的$年」,但不確定這是否可能。我是R的新手,並希望得到任何指導。這是什麼樣的,我在尋找:

Sample, Total_A, Total_B, Total_C, Years_Available 
Riverside, 3, 3, 2, 2000/2001/2002 
Pasadena, 2, 2, 2, 2000/2001 
Goleta, 2, 1, 0, 2000/2002 
Scottsdale, 1, 0, 1, 2002 
+1

產品/可能重複:[*摺疊/將一個列連接/聚合到每個組中的單個逗號分隔字符串*](https://stackoverflow.com/questions/15933958/collapse-concatenate-aggregate-a-column-to-a-single-comma-separated-string -w) – Jaap

回答

1

你可以試試這個:

df1 <- df %>% 
    group_by(Sample) %>% 
    mutate(years = toString(Year)) %>% 
    group_by(Sample, years) %>% 
    summarize_all(funs(sum(!is.na(.)))) 

我得到的輸出是:

 Sample   years Year Total_A Total_B Total_C 
     <chr>   <chr> <int> <int> <int> <int> 
1  Goleta  2000, 2002  2  2  1  0 
2 Pasadena  2000, 2001  2  2  2  2 
3 Riverside 2000, 2001, 2002  3  3  3  2 
4 Scottsdale    2002  1  1  0  1 
+0

我試過了,看來接近我想要的!然而,它只是反覆貼上第一年(例如:該欄將是年,價值爲「2000,2000,2000」等)。 –

+0

@JulietR我們是否使用相同的數據?我更新了答案,輸出的樣本數據爲 – User632716

+0

@ User632718,由於某種原因,它不適用於我的大型數據集(當然不是您的錯)。但是,由於它適用於我的示例數據,所以稍微修改一下就可以了。謝謝你! –