我有一个如下所示的数据集:
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。
我已经搞砸了太久了。我不知所措。
答案 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 R
和ave
创建逻辑索引过滤'df1'的行。
df1[with(df1, ave(CSAT, Employee, Month, FUN=length)>1),]