【问题标题】:Finding the mode using Dpylr使用 Dplyr 查找模式
【发布时间】:2019-07-25 12:04:07
【问题描述】:

我有一些使用 dplyr 包编写的代码。我想计算模式。目前,我通过一列一直写着"Character" 的列返回结果。模式将是最频繁出现的值,在我的例子中可能是一个字母、一个符号的数字。

eth.data<-data.comb %>%
  group_by(Ethnicity, `Qualification Title`, `Qualification Number`, `OutGrade`)%>%
   summarise(`Number of Learners`=n(), `Mode` = mode(`OutGrade`)) %>%
  group_by(`Qualification Number`)%>%
  mutate(`Total Number of Learners`= sum(`Number of Learners`)) %>%
  arrange(`Total Number of Learners`)

【问题讨论】:

  • 欢迎来到stackoverfow。需要数据来使您的问题具有可重复性,以便人们可以分析和评估您的问题,以数字方式找到您的答案。能否提供一些数据和预期结果?
  • 看看?modemode 告诉您对象的存储模式(例如,字符向量的“字符”)。如果你想要统计模式,写你自己的函数,见this question。另外,如果您group_by OutGrade,那么您将在summarise 函数中恰好有 1 个唯一的 OutGrade,所以不要这样做。

标签: r


【解决方案1】:

看看?modemode 告诉您对象的存储模式(例如字符向量的“字符”)。如果你想要统计模式,写你自己的函数,见this question

另外,如果您 group_by OutGrade,那么您将在 summarise 函数中恰好有 1 个唯一的 OutGrade,所以不要这样做。

让我们设置一个示例(当您提出问题时,应该这样做!)。

df <- data.frame(group=rep(LETTERS[1:5], each=20), 
                 grade=sample(letters[1:15], 100, replace=T)) 
mymode <- function(x) {
                t <- table(x)
                names(t)[ which.max(t) ]
          }
df %>% group_by(group) %>% summarise(mode=mymode(grade))

结果就是你想要的:

# A tibble: 5 x 2
  group mode 
  <chr> <chr>
1 A     l    
2 B     f    
3 C     g    
4 D     g    
5 E     c  

请注意,如果您使用group_by(group, grade),则会为每个组和年级组合调用汇总函数,因此结果会非常不同:

# A tibble: 55 x 3
# Groups:   group [5]
   group grade mode 
   <chr> <chr> <chr>
 1 A     a     a    
 2 A     b     b    
 3 A     f     f    
 4 A     h     h    
 5 A     i     i    
 6 A     k     k    
 7 A     l     l    
 8 A     m     m    
 9 A     n     n    
10 B     a     a    
# … with 45 more rows

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-30
    • 2018-04-18
    • 2020-01-06
    • 2021-12-08
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多