2016-05-16 38 views
0

所以我有关于人服用普通化学1,2005年至2015年期间保持最小值两个或两个以上的观察中的R

数据之间的大学长格式的数据是这个样子

ID Term Grade Repeated 
260 2010  F   1 
260 2011  F   1 
260 2012  C   0 
203 2011  B   0 
204 2012  D   1 
204 2013  B   1 

正如你可以看到一些人拿着类只有一次,有些重复了一次或两次。我有兴趣保持他们第一次上课的成绩。

某些内容ID重复keepd最小(TERM)或什么?我有一个25万行

谢谢!

回答

1

如果你的数据帧由Term然后

df[!duplicated(df$ID),] 
# ID Term Grade Repeated 
#1 260 2010  F  1 
#4 203 2011  B  0 
#5 204 2012  D  1 
0

使用dplyr包排序,你可以按如下做到这一点:

library(dplyr) 
df %>% group_by(ID) %>% filter(Term == min(Term)) 

Source: local data frame [3 x 4] 
Groups: ID [3] 

    ID Term Grade Repeated 
    <int> <int> <chr> <int> 
1 260 2010  F  1 
2 203 2011  B  0 
3 204 2012  D  1 

另一种选择是由长期安排和采取的第一个作为如下:

df %>% arrange(ID, Term) %>% group_by(ID) %>% slice(1) 

给出相同的输出,但在不同的牛逼为了因arrange

Source: local data frame [3 x 4] 
Groups: ID [3] 

    ID Term Grade Repeated 
    <int> <int> <chr> <int> 
1 203 2011  B  0 
2 204 2012  D  1 
3 260 2010  F  1 
0

我们可以通过 'ID' 和 '期限'

library(data.table) 
unique(setorder(setDT(df1), ID, Term), by = "ID") 
# ID Term Grade Repeated 
#1: 203 2011  B  0 
#2: 204 2012  D  1 
#3: 260 2010  F  1 
order ING使用 uniqueby选项
相关问题