在R数据框中筛选出现次数大于等于n次的子集。


为了在R数据框中筛选出现次数少于n次的组,我们可以使用dplyr包的filter函数。

例如,如果我们有一个名为df的数据框,其中包含一个分组列,例如Group,那么我们可以使用下面提到的命令来筛选出现次数少于4次的组:

df%%group_by(Group)%%filter(n()=4)

示例1

以下代码片段创建一个示例数据框:

Grp<-sample(LETTERS[1:3],20,replace=TRUE)
Response<-rpois(20,10)
df1<-data.frame(Grp,Response)
df1

创建了以下数据框

  Grp Response
 1 B  7
 2 A 12
 3 A  9
 4 C 11
 5 B  9
 6 B  7
 7 A  5
 8 C  5 
 9 A  6
10 A 12
11 A  4
12 A 11
13 C 13
14 A 17
15 A 12
16 B  9
17 C  4
18 B 11
19 A  7
20 B 10

要在上面创建的数据框中加载dplyr包并根据出现次数大于等于6次的Grp分组列筛选df1,请将以下代码添加到上面的代码片段中:

Grp<-sample(LETTERS[1:3],20,replace=TRUE)
Response<-rpois(20,10)
df1<-data.frame(Grp,Response)
library(dplyr)
df1%%group_by(Grp)%%filter(n()=6)
# A tibble: 16 x 2
# Groups: Grp [2]

输出

如果您将上面给出的所有代码片段作为一个程序执行,它将生成以下输出:

 Grp  Response
 <chr <int
 1 B  7
 2 A 12
 3 A  9
 4 B  9
 5 B  7
 6 A  5
 7 A  6
 8 A 12
 9 A  4
10 A 11
11 A 17
12 A 12
13 B  9
14 B 11
15 A  7
16 B 10

示例2

以下代码片段创建一个示例数据框:

Class<-sample(c("First","Second","Third"),20,replace=TRUE)
Price<-sample(20:50,20)
df2<-data.frame(Class,Price)
df2

创建了以下数据框

  Class  Price
 1 First  45
 2 Third  41
 3 First  42
 4 Second 30
 5 First  31
 6 Second 28
 7 Third  24
 8 Third  39
 9 Third  44
10 Second 38
11 Third  37
12 Second 49
13 Third  23
14 Third  33
15 First  20
16 Second 36
17 Second 27
18 First  21
19 First  47
20 Third  34

要在上面创建的数据框中根据出现次数大于等于8次的Class分组列筛选df2,请将以下代码添加到上面的代码片段中:

Class<-sample(c("First","Second","Third"),20,replace=TRUE)
Price<-sample(20:50,20)
df2<-data.frame(Class,Price)
df2%%group_by(Class)%%filter(n()=8)
# A tibble: 8 x 2
# Groups: Class [1]

输出

如果您将上面给出的所有代码片段作为一个程序执行,它将生成以下输出:

  Class Price
  <chr <int
1 Third 41
2 Third 24
3 Third 39
4 Third 44
5 Third 37
6 Third 23
7 Third 33
8 Third 34

更新于:2021年11月8日

436 次浏览

开启你的职业生涯

通过完成课程获得认证

开始学习
广告