Проблема с ошибкой R при использовании dplyr :: diver (): «нет применимого метода для« Proper_ », примененного к объекту класса« c («double», «numeric») »» - PullRequest
0 голосов
/ 19 сентября 2019

Вот мой пример dataframe:

df.ex <- structure(
  list(
    id_1 = c(15796L, 15796L, 15799L, 15799L),
    id_2 = c(61350L,
             351261L, 61488L, 315736L),
    days = c(30.5, 36.4854, 30.5, 30.5)
  ),
  row.names = c(NA,-4L),
  class = "data.frame",
  .Names = c("id_1",
             "id_2", "days")
)

Я получаю эту ошибку с dplyr::distinct()

Error in UseMethod("distinct_") : no applicable method for 'distinct_' applied to an object of class "c('double', 'numeric')"

Что сбивает с толку, так это то, что это работает всякий раз, когда я передаю фрейм данных в функцию иукажите столбец следующим образом: distinct(df.ex, days).Однако, если я создаю вектор интересующей переменной, например, так: days_vec <- df.ex$days и передаю вектор в качестве аргумента функции следующим образом: distinct(days_vec), я получаю ошибку.

В моем реальном коде мне нужно использовать distinct в трубе dplyr, например:

df.ex %>% summarise(distinct_values = distinct(days))

И, конечно, это тоже не работает.Кто-нибудь знает, как побороть эту ошибку?

Большое спасибо, Питер

РЕДАКТИРОВАТЬ: для моей острой проблемы мне нужно составить сводную таблицу с количеством различных значений для days, которая будет сгруппирована по id_1, это будетвыглядело это так:

result <- tibble(
  id_1 = c(15796, 15799),
  count_distinct_values = c(2, 1)
)

Я бы подумал, что поможет следующее, однако он возвращает еще одну ошибку:

result <- df.ex %>% group_by(id_1) %>% summarise(count_distinct_values = count(distinct(., days)))

Любые идеи будут очень признательны.

1 Ответ

1 голос
/ 19 сентября 2019

Может быть, вы можете попробовать

df.ex %>% group_by(id_1) %>% summarise(distinct_values = n_distinct(days))

Вам нужны . внутри distinct, поскольку они применяются к tbl (или фреймам данных ...), и я добавляю list показать все отдельные значения, а не только первое.

Другой способ:

df.ex %>% distinct(distinct_values = days)

ОБНОВИТЬ соответственно вопросу.Я думаю, что это решает вашу проблему:

df.ex %>% group_by(id_1) %>% summarise(distinct_values = n_distinct(days))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...