我在R中有一个数据框,看起来与下面的相似,带有类别/因子变量“ Genre”:
|Genre|Listening Time|
|Rock |1:05 |
|Pop |3:10 |
|RnB |4:12 |
|Rock |2:34 |
|Pop |5:01 |
我想保留数据集中的前15个流派(按计数/频率),并且只选择前15个中所有not的其他流派。这些应重命名为“其他”。我将如何处理?
谢谢!
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
[如果您想查看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