根据符合标准的观测数量在R中对数据集进行子集。 [R]

时间:2016-09-19 14:55:09

标签: r

我有一个如下所示的数据集:

Employee    Month       CSAT

ABROWN      February    4

ABROWN      January     5

ABROWN      March       3

ABROWN      March       5

JSMITH      February    5

JSMITH      January     3

JSMITH      February    5

JSMITH      March       5

JSMITH      February    5

JSMITH      January     4

除了当然要大得多。我试图按月对员工进行分析,但我不想包括在某个月内没有足够观察的员工。

例如,假设在这种情况下,我只想观察员工在同一个月内至少有两个CSAT分数。在这种情况下,我们将过滤掉观察1,2和8。

我已经搞砸了太久了。我不知所措。

1 个答案:

答案 0 :(得分:0)

我们可以使用data.table执行此操作。将'data.frame'转换为'data.table'(setDT(df1)),按'员工','月',if分组,观察次数(.N)大于1,子集Data.table(.SD

library(data.table)
setDT(df1)[, if(.N >1) .SD,  by = .(Employee, Month)]
#   Employee    Month CSAT
#1:   ABROWN    March    3
#2:   ABROWN    March    5
#3:   JSMITH February    5
#4:   JSMITH February    5
#5:   JSMITH February    5
#6:   JSMITH  January    3
#7:   JSMITH  January    4

在“员工”,“月份”分组后,在dplyr中使用filter具有类似逻辑的<{1}}

library(dplyr)
df1 %>%
   group_by(Employee, Month) %>%
   filter(n() >1)

或者使用base Rave创建逻辑索引过滤'df1'的行。

df1[with(df1, ave(CSAT, Employee, Month, FUN=length)>1),]