2017-01-27 2 views
-1

Я суммирую таблицу в R, используя пакет dplyr. Я хотел бы видеть уникальные значения только для столбца в моей таблице (Services.Offered). Однако, когда я пытаюсь следующий код, я не получаю уникальные значения в этом столбцамиПолучите уникальные значения для строки в R, используя dplyr

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 

Я вообще предпочитаю, чтобы сортировать результаты (так что «а, б, "и„с, Ь, а“дают один и тот же вход), и мне нравится больше контроля, так что я обычно использую что-то вроде:

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 
Смежные вопросы