【问题标题】:Problem with R error when using dplyr::distinct(): "no applicable method for 'distinct_' applied to an object of class "c('double', 'numeric')""使用 dplyr::distinct() 时出现 R 错误问题:“没有适用于 'distinct_' 的方法应用于类“c('double', 'numeric')”的对象
【发布时间】:2019-09-19 10:01:59
【问题描述】:

这是我的示例数据框:

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 &lt;- df.ex$days 并将向量作为参数传递给函数,如下所示:distinct(days_vec) 然后我得到错误。

在我的实际代码中,我需要在 dplyr 管道中使用 distinct,如下所示:

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)))

任何想法都将不胜感激。

【问题讨论】:

  • distinct 的第一个参数是 data.frame,当您执行 df.ex %&gt;% summarise(distinct_values = distinct(days)) 时,您将 days 传递给它,这是一个向量,因此会出现错误。你想做什么?

标签: r dplyr distinct


【解决方案1】:

也许你可以试试

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))

【讨论】:

  • 谢谢,这些工作。但是,我应该更具体地回答我的问题。我需要它来返回一个数据框。我将编辑问题以使其更清楚。谢谢
  • 如果需要数据框,把pull从第二种方式中去掉。我编辑我的答案。
  • 再次感谢,我编辑了我的问题以更清楚地说明我在寻找什么。基本上我需要一个使用带有 ID 的 group_by 的汇总表,但这会返回错误。
  • 我编辑了我的答案。看来你需要n_distinct。是吗?
  • 哇,这正是我所需要的!但是理解为什么count(distinct(., days)) 不返回相同的东西仍然会很好。理论上它应该给出正确的结果!
猜你喜欢
  • 1970-01-01
  • 2021-07-21
  • 1970-01-01
  • 2021-08-17
  • 2019-07-22
  • 1970-01-01
  • 2022-10-05
  • 1970-01-01
  • 2014-09-15
相关资源
最近更新 更多