2017-01-27 34 views
-1

我使用包dplyr在R中彙總了一個表。我希望僅查看錶格中的一列(Services.Offered)的唯一值。然而,當我嘗試下面的代碼,我沒有得到的唯一值在此列〜使用dplyr獲取R中字符串的唯一值

sheetforr1=sheetforr %>% 
       group_by(Account.Name, Service.managed.by.country) %>% 
       summarise(Services.Offered = unique(toString(Service.Level.2)), 
         POB = toString(Number.of.Users), 
         Start.Dates = toString(Provider.Start.Date), 
         End.Dates = toString(Provider.End.Date)) %>% 
       ungroup() 

爲「Services.Offered」包含重複儘管使用「獨一無二」(例如列結果:清潔,園藝,維護,清潔,內務管理,家政)。

此外,當我使用而不是「獨特的」「獨立的」,我得到的錯誤消息:

關於「distinct_」施加到類別「人物」的目的

沒有適用的方法

繼續我剛剛使用的例子,我想列Services.Offered顯示:(清潔,園藝,維護,內務管理)。

非常感謝您的幫助。

+0

代碼的可讀性會通過適當的縮進和周圍經營的空白將大大提高... –

+1

這是一個瘋狂的想法....分享一些重複性的數據!?!? – Sotos

回答

1

您正在將toString放入unique之內,因此全矢量首先被轉換爲字符串。然後,unique正在返回該單個字符串,因爲它是唯一剩下的字符串。如果你顛倒了訂單,你會得到正確的行爲。

既然你沒有提供任何樣本數據,這裏有一個例子:

set.seed(8675309) 
df <- 
    data.frame(
    group = rep(LETTERS[1:3], each = 5) 
    , string = sample(letters[1:10], 15, TRUE) 
) 



df %>% 
    group_by(group) %>% 
    summarise(strings = toString(unique(string))) 

回報

group strings 
    <chr>  <chr> 
1  A b, e, h, c 
2  B g, j, i, e 
3  C i, f, c, h 

我一般喜歡對結果進行排序(以便「A,B,C 「和‘C,b,A’給予同樣的條目),我喜歡更多的控制,所以我通常使用類似:

df %>% 
    group_by(group) %>% 
    summarise(strings = string %>% unique %>% sort %>% paste(collapse = ", ")) 

這給

group strings 
    <chr>  <chr> 
1  A b, c, e, h 
2  B e, g, i, j 
3  C c, f, h, i