获取dplyr管道结构中最频繁出现的因子水平

时间:2018-07-18 22:57:54

标签: r dplyr

我希望能够在使用dplyr的管道结构时找到数据集中某个因素中最频繁出现的水平。我正在尝试创建一个新变量,该变量在按另一个变量分组时包含“模态”因子水平。

这是我正在寻找的示例:

df <- data.frame(cat = stringi::stri_rand_strings(100, 1, '[A-Z]'), num = floor(runif(100, min=0, max=500)))
df <- df %>%
            dplyr::group_by(cat) %>%
            dplyr::mutate(cat_mode = Mode(num))

“ Mode”是我要寻找的功能

2 个答案:

答案 0 :(得分:1)

使用table对项目进行计数,然后使用which.max找出最频繁的项目:

df %>%
    group_by(cat) %>%
    mutate(cat_mode = names(which.max(table(num)))) %>% 
    head()

# A tibble: 6 x 3
# Groups: cat [4]
#  cat      num cat_mode
#  <fctr> <dbl> <chr>   
#1 Q      305   138     
#2 W       34.0 212     
#3 R       53.0 53      
#4 D      395   5       
#5 W      212   212     
#6 Q      417   138  
# ...

答案 1 :(得分:1)

Is there a built-in function for finding the mode?类似的问题

-O -

查看每个因素

Mode <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}

df %>% 
  group_by(cat) %>% 
  mutate(cat_mode = Mode(num))

# A tibble: 100 x 3
# Groups:   cat [26]
   cat     num cat_mode
   <fct> <dbl>    <dbl>
 1 S        25       25
 2 V        86      478
 3 R       335      335
 4 S       288       25
 5 S       330       25
 6 Q       384      384
 7 C       313      313
 8 H       275      275
 9 K       274      274
10 J        75       75
# ... with 90 more rows