You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用dplyr::distinct()时R报错:‘distinct_’无适用方法于数值型对象

解决dplyr分组统计唯一值数量的问题

嗨Peter,我来帮你梳理下问题并给出解决方案:

为什么会报错?

你遇到的报错核心原因是dplyr::distinct()的设计逻辑:它是专门为数据框设计的函数,不能直接传入单个向量(比如你提取的days_vec),也不能在summarise()里直接用——因为summarise()要求每组返回一个标量值,而distinct()返回的是数据框,类型不匹配,所以触发了no applicable method的错误。

正确的解决方案

要实现按id_1分组统计days的唯一值数量,最直接的方法是用dplyr内置的n_distinct()函数,它就是专门干这个活的:

library(dplyr)

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

# 正确代码
result <- df.ex %>% 
  group_by(id_1) %>% 
  summarise(count_distinct_values = n_distinct(days))

result
#> # A tibble: 2 × 2
#>    id_1 count_distinct_values
#>   <int>                 <int>
#> 1 15796                     2
#> 2 15799                     1

如果你一定要用distinct()来实现,也可以先分组提取唯一值,再统计行数:

result <- df.ex %>% 
  group_by(id_1) %>% 
  distinct(days) %>%  # 保留每组的唯一days值
  summarise(count_distinct_values = n())  # 统计每组的行数

补充说明

  • n_distinct()默认会忽略NA值,如果你的数据里有NA且需要把它算作一个唯一值,可以加参数na.rm = FALSE,比如n_distinct(days, na.rm = FALSE)。
  • 之前你尝试的count(distinct(., days))之所以报错,是因为distinct(., days)返回的是数据框,count()又是用来统计数据框行数的函数,嵌套在summarise()里会导致类型不匹配,所以行不通。

内容的提问来源于stack exchange,提问作者pd441

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:00:03