我有一个数据帧,称为"df",它包含了在过go 5年中检测到的大约250只命名的个体鸟类,大约11000行.Df具有日期、鸟、年、月、日和结果列.GROUP_BY/SUMMISE命令创建了一个新的表"df2",其中每只鸟都有一行,如果当月看到了鸟,则新列包含"1",如果没有检测到,则包含"0".这些列的命名格式为"YYMM",因此2020年3月在新表中显示为列"2003".现在,让这张桌子占据60多行的说明.我 for each 新专栏编写一行(50个月意味着我的命令将获得50行)--见下文.样本数据:
df <- data.frame(DATE = as.Date(c("02/16/18","03/16/18","03/16/18","04/16/18","05/16/18","05/19/18"),
format = "%m/%d/%y"),
BIRD = c("emww","emww","oaam","bbcm","bbcm","bbcm"),
YEAR = c(2018,2018,2018,2018,2018,2018),
MONTH = c(02,03,03,04,05,05),
OUTCOME = c(1,0,1,1,0,0))
工作正常但变得如此冗长的代码:
df2 <- df %>%
group_by(BIRD) %>%
summarise(
"1802" = as.numeric(any(YEAR==2018 & MONTH == 2 & OUTCOME==1)),
"1803" = as.numeric(any(YEAR==2018 & MONTH == 3 & OUTCOME==1)),
"1804" = as.numeric(any(YEAR==2018 & MONTH == 4 & OUTCOME==1)),
"1805" = as.numeric(any(YEAR==2018 & MONTH == 5 & OUTCOME==1)),
"1806" = as.numeric(any(YEAR==2018 & MONTH == 6 & OUTCOME==1)),
"1807" = as.numeric(any(YEAR==2018 & MONTH == 7 & OUTCOME==1)),
"1808" = as.numeric(any(YEAR==2018 & MONTH == 8 & OUTCOME==1)))
(在五年的研究中,将有60行类似于上面的行,我只编辑了专栏标题、年份和月份,其他行都是相同的).
我很希望能够做一些像这样的事情
startdate <- as.Date("02/16/18", format = "%m/%d/%y")
enddate <- as.Date("12/16/23", format = "%m/%d/%y")
然后让R写出我那几个月的GROUP_BY/SUMMARY代码大块,而不是我手动编辑它.有谁对如何做到这一点(或其他更有效的方法)有什么建议吗?