首页 > 解决方案 > 如何只保留列中的前 n 行

问题描述

我有一个这样的数据框:

ID | Item |
1  | A    |
1  | B    |
2  | A    |
3  | B    |
1  | C    |
4  | C    |
5  | B    |
3  | A    |
4  | A    |
5  | D    |

在 R 中,如何仅保留项目列中的前 N ​​个值(按计数)?我还想用“其他”填充不在 Top N 中的值。前 2 个值的预期结果:

ID | Item   |
1  | A      |
1  | B      |
2  | A      |
3  | B      |
1  | Others |
4  | Others |
5  | B      |
3  | A      |
4  | A      |
5  | Others |

我也如何处理领带盒?

标签: rdplyr

解决方案


实现此目的的一种方法是fct_lump使用forcatspackage.json 。示例代码:

library(dplyr)
library(forcats)
set.seed(42)

df <- tibble(
    id = sample(1:5, 10, replace = TRUE), 
    item = sample(LETTERS[1:4], 10, replace = TRUE))

df %>% 
    dplyr::mutate(item = forcats::fct_lump(item, 2))

输出:

# A tibble: 10 x 2
      id item 
   <int> <fct>
 1     1 A    
 2     5 A    
 3     1 B    
 4     1 Other
 5     2 B    
 6     4 B    
 7     2 Other
 8     2 Other
 9     1 A    
10     4 A  

推荐阅读