我对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
就这样,每一行代表一个人。我想总结一下数据框,为同一物种的记录添加interval1和interval2,并选择最高的繁殖证据。到目前为止,我有:
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
在此先感谢您的帮助!
答案 0 :(得分:1)
也许您可以定义另一个变量来设置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