Обобщая данные подсчета и возвращая наивысший уровень фактора в R - PullRequest
0 голосов
/ 19 сентября 2018

Я довольно плохо знаком с R, и у меня есть фрейм данных с подсчетом отдельных птиц, которые были обнаружены на разных станциях, а также с данными о разведении (упорядоченный фактор) для каждого человека.Это выглядит примерно так:

station<-c('stn1','stn1','stn1','stn1','stn1','stn2','stn2')
species<-c('PBGR','PBGR','SORA','SORA','SORA','LCSP','SORA')
interval1<-c(0,0,1,1,0,1,0)
interval2<-c(1,1,0,0,1,0,1)
breeding.evidence<-c('A','A','S','S','D','S','S')
breeding.evidence<-factor(breeding.evidence,levels=c('S','D','A'))

df<-data.frame(station,species,interval1,interval2,breeding.evidence)

>df
  station species interval1 interval2 breeding.evidence
1    stn1    PBGR         0         1                 A
2    stn1    PBGR         0         1                 S
3    stn1    SORA         1         0                 S
4    stn1    SORA         1         0                 S
5    stn1    SORA         0         1                 D
6    stn2    LCSP         1         0                 S
7    stn2    SORA         0         1                 S

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

library(dplyr)

df%>%
group_by(station,species)%>%
summarise_at(vars(interval1:interval2),sum)

, который работает и возвращает

  station species interval1 interval2 
1    stn1    PBGR         0         2 
2    stn1    SORA         2         1                 
3    stn2    LCSP         1         0 
4    stn2    SORA         0         1 

Но я потерял доказательство размножения и, как мог, не могу понять, какой код будетРабота.В конце концов я хотел бы получить следующее:

  station species interval1 interval2  breeding.evidence
1    stn1    PBGR         0         2                  A
2    stn1    SORA         2         1                  D       
3    stn2    LCSP         1         0                  S
4    stn2    SORA         0         1                  S

Заранее благодарен за помощь!

1 Ответ

0 голосов
/ 19 сентября 2018

Возможно, вы можете определить другую переменную, которая устанавливает порядок breeding.evidence, как показано ниже:

df <- df %>%
  mutate(ind = case_when(breeding.evidence == "A"~1L,
                         breeding.evidence == "D"~2L,
                         breeding.evidence == "S"~3L,
                         TRUE~NA_integer_))

Затем вы можете объединить первое резюме с другим из того же набора данных, взяв first breeding.evidence после упорядочения по этой переменной упорядочения (ind).

df%>%
  group_by(station,species)%>%
  summarise_at(vars(interval1:interval2),sum) %>%
  left_join(df %>%
              group_by(station, species) %>%
              arrange(ind) %>%
              summarise_at(vars(breeding.evidence), funs(first)))

Выход

# A tibble: 4 x 5
# Groups:   station [?]
  station species interval1 interval2 breeding.evidence
  <fct>   <fct>       <dbl>     <dbl> <fct>            
1 stn1    PBGR            0         2 A                
2 stn1    SORA            2         1 D                
3 stn2    LCSP            1         0 S                
4 stn2    SORA            0         1 S  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...