如何更改R中分类变量的最高值(按频率)的所有期望值

问题描述 投票:0回答:2

我在R中有一个数据框,看起来与下面的相似,带有类别/因子变量“ Genre”:

|Genre|Listening Time|
|Rock |1:05          |
|Pop  |3:10          |
|RnB  |4:12          |
|Rock |2:34          |
|Pop  |5:01          |

我想保留数据集中的前15个流派(按计数/频率),并且只选择前15个中所有not的其他流派。这些应重命名为“其他”。我将如何处理?

谢谢!

r grouping rename categories
2个回答
0
投票
df <- data.frame(Genre=sample(letters, 1000, replace=TRUE),
                 ListeningTime=runif(1000, 3, 5))

freq <- table(df$Genre)
sorted <- sort(freq)

other <- sorted[-1*1:15]

这是您需要的输出吗?

> freq
 a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z 
32 47 32 47 19 40 42 37 29 47 36 43 42 42 31 37 42 56 40 40 43 42 31 25 44 34 

> sorted
 e  x  i  o  w  a  c  z  k  h  p  f  s  t  g  m  n  q  v  l  u  y  b  d  j  r 
19 25 29 31 31 32 32 34 36 37 37 40 40 40 42 42 42 42 42 43 43 44 47 47 47 56

> other
 m  n  q  v  l  u  y  b  d  j  r 
42 42 42 42 43 43 44 47 47 47 56

0
投票

[如果您想查看tidyverse,则可以执行以下操作。我试图模仿您的数据框,但添加了更多行。

library(tidyverse)

set.seed(1)
Data <- data.frame(
  listen = format(as.POSIXlt(paste0(
      as.character(sample(1:5)),
      ':',
      as.character(sample(0:59))), format = '%H:%M'),format = '%H:%M'),
  Genre = sample(c("Rock", "Pop", 'RnB'), 120, replace = TRUE)
)


Data %>%
  group_by(Genre ) %>%
  select(listen) %>% 
  top_n(5)
#> Adding missing grouping variables: `Genre`
#> Selecting by listen
#> # A tibble: 15 x 2
#> # Groups:   Genre [3]
#>    Genre listen
#>    <chr> <chr> 
#>  1 Pop   05:41 
#>  2 RnB   05:44 
#>  3 RnB   05:54 
#>  4 RnB   05:43 
#>  5 RnB   05:28 
#>  6 Rock  05:26 
#>  7 RnB   05:29 
#>  8 Pop   05:47 
#>  9 Rock  05:41 
#> 10 Rock  05:44 
#> 11 Rock  05:54 
#> 12 Pop   05:43 
#> 13 Pop   05:28 
#> 14 Rock  05:29 
#> 15 Pop   05:47
© www.soinside.com 2019 - 2024. All rights reserved.