Сохранить уровни фактора, содержащего минимальное количество уровней, в другом факторе - PullRequest
0 голосов
/ 27 января 2019

У меня есть фрейм данных примерно так:

 df<-data.frame(year= as.numeric(c(rep(1997, 5), rep(1998, 5), rep(1999, 5))), 
       sp= c("A", "B", "C", "D", "E", "A", "B", "C", "F", "G", "H", "I", "J","A", "B"))

Я хочу сохранить уровни sp, для которых в year есть минимальное количество уникальных уровней.Для этого примера я хочу сохранить sp, для которого есть данные как минимум за 2 года.

Я пробовал это:

df<-
 df %>% 
 group_by(sp) %>% 
 filter(length(year) >= 2)

Правильный вывод:

 output<- data.frame( year= c("1997", "1998", "1999","1997", "1998", "1999", "1997", "1998"), 
                 sp= c("A", "A", "A", "B", "B", "B", "C", "C"))

Ответы [ 2 ]

0 голосов
/ 27 января 2019

A dplyr метод:

df %>% group_by(sp) %>% filter(n() >= 2) %>% arrange(sp)

#    year sp   
#   <dbl> <fct>
# 1  1997 A    
# 2  1998 A    
# 3  1999 A    
# 4  1997 B    
# 5  1998 B    
# 6  1999 B    
# 7  1997 C    
# 8  1998 C
0 голосов
/ 27 января 2019

Вы можете использовать aggregate().

df1 <- merge(df1, aggregate(list(count=df1$year), by=list(sp=df1$sp), length))
df1 <- df1[df1$count >= 2, c(2, 1)]

Результат

> df1
  year sp
1 1997  A
2 1998  A
3 1999  A
4 1998  B
5 1999  B
6 1997  B
7 1998  C
8 1997  C

Данные

df1 <- structure(list(year = c(1997, 1998, 1999, 1998, 1999, 1997, 1998, 
1997), sp = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L), .Label = c("A", 
"B", "C", "D", "E", "F", "G", "H", "I", "J"), class = "factor")), row.names = c(NA, 
8L), class = "data.frame")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...