2016-05-16 1 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 

Как вы можете видеть, некоторые люди взяли класс только один раз, а некоторые повторили его один или два раза. Я заинтересован в том, чтобы сохранить класс в первый раз, когда они заняли класс.

Что-то идентификатор повторяется keepd min (TERM) или что-то еще? У меня есть 250000 строк

Спасибо!

ответ

1

Если dataframe отсортирован по 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

Мы можем использовать unique с by опцией после order Инг на 'ID' и '' Term

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