2016-09-19 108 views
1

我有一个数据集,看起来像这样:根据符合条件的观测数目对R中的数据集进行子集设置。 [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.

我已经搞砸了太久。而且我很茫然。

+0

请张贴您尝试进行审查的代码。 – Fencer04

回答

0

我们可以用data.table来做到这一点。将'data.frame'转换为'data.table'(setDT(df1)),按照'Employee','Month'分组,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 

或者由 '雇员' 分组后在filter使用dplyr具有类似的逻辑, '月'

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

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

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

太棒了!谢谢! –

+0

@TannerPhillips没问题。很高兴它帮助你。如果您还没有阅读,请阅读[this](http://stackoverflow.com/help/accepted-answer)。 – akrun