Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有一种方法可以通过R中的多个组进行聚合?_R_Group By_Aggregate - Fatal编程技术网

有没有一种方法可以通过R中的多个组进行聚合?

有没有一种方法可以通过R中的多个组进行聚合?,r,group-by,aggregate,R,Group By,Aggregate,我有一个摄像头陷阱数据集,其中包含文件名、站点ID、物种、计数、日期、时间等。我正在尝试创建一个记录表,在该记录表中,对于每个检测到的物种,对于每个摄像头站,我有最大数量的独立检测(即,如果将独立间隔设置为30分钟,并且在相同的30分钟间隔内检测到2只鹿和13只鹿,我希望使用13只,而不是2只) 原始数据: File SiteID Date Time Species Count Can_001 YVR01 03-May-201

我有一个摄像头陷阱数据集,其中包含文件名、站点ID、物种、计数、日期、时间等。我正在尝试创建一个记录表,在该记录表中,对于每个检测到的物种,对于每个摄像头站,我有最大数量的独立检测(即,如果将独立间隔设置为30分钟,并且在相同的30分钟间隔内检测到2只鹿和13只鹿,我希望使用13只,而不是2只)

原始数据:

File     SiteID     Date            Time       Species     Count
Can_001  YVR01      03-May-2018     21:34:25   Squirrel    3
Can_001  YVR01      03-May-2018     21:34:58   Squirrel    3
Can_001  YVR01      03-May-2018     21:36:25   Squirrel    1
到目前为止,我所做的是尝试首先按站点ID分组,然后按物种分组,然后按日期分组,然后创建一个有30分钟时间间隔的列,从中我需要找出如何在时间间隔内获得最大“计数”值-这些将是我正在使用的检测

物种组%
组别(种类)%>%
分组单位(日期)%>%
分组人(间隔时间=发言日期(DateTimeOriginalp,“30分钟”)

我能够进入创建30分钟间隔期和创建列的阶段,但在这一点之后,Summary()、aggregate()、tapply()等函数似乎无法工作,因为它不允许我拉起“间隔时间”已创建列。新的Interval\u Time列采用dttm格式,并在我查看和调用物种组数据帧时显示。我现在需要做的是获取这些间隔内每个物种的最大计数。这是我尝试的(即管道外部):

speciesgroup3也许您可以使用:

aggregate(. ~Interval_Time+SiteID, data=species_group, max, na.rm=TRUE)
例如,在这里寻找一个类似的问题 也许您可以使用:

aggregate(. ~Interval_Time+SiteID, data=species_group, max, na.rm=TRUE)
例如,在这里寻找一个类似的问题

使用library tidyverse中包含的dplyr函数,这应该与您要查找的内容非常接近

library(tidyverse)
library(lubridate)
df = read.table(text="
File     SiteID     Date            Time       Species     Count
Can_001  YVR01      03-May-2018     21:34:25   Squirrel    3
Can_001  YVR01      03-May-2018     21:34:58   Squirrel    3
Can_001  YVR01      03-May-2018     22:01:25   Squirrel    1
Can_001  YVR01      03-May-2018     21:34:58   Deer        5
Can_001  YVR01      03-May-2018     21:36:25   Deer        7
", header=T)

# Use mutate and the lubridate::mdy_hms to derive a proper date
# column from the text date time 
df2 <- df %>%
  mutate(DateTime = mdy_hms(paste(Date, Time)),
         period = floor_date(DateTime, "30 mins")) %>%
         select(-Date, -Time)

# File SiteID  Species Count            DateTime              period
# 1 Can_001  YVR01 Squirrel     3 2018-03-20 21:34:25 2018-03-20 21:30:00
# 2 Can_001  YVR01 Squirrel     3 2018-03-20 21:34:58 2018-03-20 21:30:00
# 3 Can_001  YVR01 Squirrel     1 2018-03-20 22:01:25 2018-03-20 22:00:00
# 4 Can_001  YVR01     Deer     5 2018-03-20 21:34:58 2018-03-20 21:30:00
# 5 Can_001  YVR01     Deer     7 2018-03-20 21:36:25 2018-03-20 21:30:00

# Summarize dow to the period level, applying the max function within the group by
df2 %>% 
  group_by(SiteID, Species, period) %>%
  summarize(n = max(Count))

# Groups:   SiteID, Species [?]
# SiteID Species  period                  n
# <fct>  <fct>    <dttm>              <dbl>
# 1 YVR01  Deer     2018-03-20 21:30:00     7
# 2 YVR01  Squirrel 2018-03-20 21:30:00     3
# 3 YVR01  Squirrel 2018-03-20 22:00:00     1
库(tidyverse)
图书馆(lubridate)
df=读取。表格(文本=”
文件站点ID日期时间物种计数
Can_001 YVR01 03-May-2018 21:34:25松鼠3
Can_001 YVR01 03-May-2018 21:34:58松鼠3
Can_001 YVR01 03-May-2018 22:01:25松鼠1
Can_001 YVR01 03-May-2018 21:34:58 5
Can_001 YVR01 03-May-2018 21:36:25鹿7
“,页眉=T)
#使用mutate和lubridate::mdy_hms导出正确的日期
#来自文本日期时间的列
df2%
mutate(DateTime=mdy_hms(粘贴(日期、时间)),
期间=现场日期(日期时间,“30分钟”)%>%
选择(-Date,-Time)
#文件站点ID物种计数日期时间段
#1 Can_001 YVR01松鼠3 2018-03-20 21:34:25 2018-03-20 21:30:00
#2 Can_001 YVR01松鼠3 2018-03-20 21:34:58 2018-03-20 21:30:00
#3 Can_001 YVR01松鼠1 2018-03-20 22:01:25 2018-03-20 22:00:00
#4 Can_001 YVR01 Deer 5 2018-03-20 21:34:58 2018-03-20 21:30:00
#5 Can_001 YVR01 Deer 7 2018-03-20 21:36:25 2018-03-20 21:30:00
#将道琼斯指数汇总至期间水平,在集团内应用最大值函数
df2%>%
分组依据(场地ID、物种、时期)%>%
汇总(n=最大值(计数))
#组:站点ID,物种[?]
#站点物种周期n
#                     
#1 YVR01鹿2018-03-20 21:30:00 7
#2 YVR01松鼠2018-03-20 21:30:00 3
#3 YVR01松鼠2018-03-20 22:00:00 1

使用library tidyverse中包含的dplyr函数,这应该与您要查找的内容非常接近

library(tidyverse)
library(lubridate)
df = read.table(text="
File     SiteID     Date            Time       Species     Count
Can_001  YVR01      03-May-2018     21:34:25   Squirrel    3
Can_001  YVR01      03-May-2018     21:34:58   Squirrel    3
Can_001  YVR01      03-May-2018     22:01:25   Squirrel    1
Can_001  YVR01      03-May-2018     21:34:58   Deer        5
Can_001  YVR01      03-May-2018     21:36:25   Deer        7
", header=T)

# Use mutate and the lubridate::mdy_hms to derive a proper date
# column from the text date time 
df2 <- df %>%
  mutate(DateTime = mdy_hms(paste(Date, Time)),
         period = floor_date(DateTime, "30 mins")) %>%
         select(-Date, -Time)

# File SiteID  Species Count            DateTime              period
# 1 Can_001  YVR01 Squirrel     3 2018-03-20 21:34:25 2018-03-20 21:30:00
# 2 Can_001  YVR01 Squirrel     3 2018-03-20 21:34:58 2018-03-20 21:30:00
# 3 Can_001  YVR01 Squirrel     1 2018-03-20 22:01:25 2018-03-20 22:00:00
# 4 Can_001  YVR01     Deer     5 2018-03-20 21:34:58 2018-03-20 21:30:00
# 5 Can_001  YVR01     Deer     7 2018-03-20 21:36:25 2018-03-20 21:30:00

# Summarize dow to the period level, applying the max function within the group by
df2 %>% 
  group_by(SiteID, Species, period) %>%
  summarize(n = max(Count))

# Groups:   SiteID, Species [?]
# SiteID Species  period                  n
# <fct>  <fct>    <dttm>              <dbl>
# 1 YVR01  Deer     2018-03-20 21:30:00     7
# 2 YVR01  Squirrel 2018-03-20 21:30:00     3
# 3 YVR01  Squirrel 2018-03-20 22:00:00     1
库(tidyverse)
图书馆(lubridate)
df=读取。表格(文本=”
文件站点ID日期时间物种计数
Can_001 YVR01 03-May-2018 21:34:25松鼠3
Can_001 YVR01 03-May-2018 21:34:58松鼠3
Can_001 YVR01 03-May-2018 22:01:25松鼠1
Can_001 YVR01 03-May-2018 21:34:58 5
Can_001 YVR01 03-May-2018 21:36:25鹿7
“,页眉=T)
#使用mutate和lubridate::mdy_hms导出正确的日期
#来自文本日期时间的列
df2%
mutate(DateTime=mdy_hms(粘贴(日期、时间)),
期间=现场日期(日期时间,“30分钟”)%>%
选择(-Date,-Time)
#文件站点ID物种计数日期时间段
#1 Can_001 YVR01松鼠3 2018-03-20 21:34:25 2018-03-20 21:30:00
#2 Can_001 YVR01松鼠3 2018-03-20 21:34:58 2018-03-20 21:30:00
#3 Can_001 YVR01松鼠1 2018-03-20 22:01:25 2018-03-20 22:00:00
#4 Can_001 YVR01 Deer 5 2018-03-20 21:34:58 2018-03-20 21:30:00
#5 Can_001 YVR01 Deer 7 2018-03-20 21:36:25 2018-03-20 21:30:00
#将道琼斯指数汇总至期间水平,在集团内应用最大值函数
df2%>%
分组依据(场地ID、物种、时期)%>%
汇总(n=最大值(计数))
#组:站点ID,物种[?]
#站点物种周期n
#                     
#1 YVR01鹿2018-03-20 21:30:00 7
#2 YVR01松鼠2018-03-20 21:30:00 3
#3 YVR01松鼠2018-03-20 22:00:00 1

请参见下面的dplyr答案。1)按日期分组后,以下函数将对剩余的未分组列进行操作2)%%>%group___by来自dplyr,因此请使用SUMMATE而不是base R中的AGGRATE。此外,您提供了数据也很好,最好还提供了一个您希望看到dplyr答案的示例。1) 按日期分组后,以下函数将对其余未分组的列进行操作2)%>%group_by来自dplyr,因此请使用SUMMARY而不是base R中的AGGRATE。此外,您提供了数据也很好,最好还提供了一个示例,说明您想要的内容非常感谢!这最终对我有用,使用了我以前创建的相同的“间隔时间”列!将尝试它使用期间,并确保相同的结果返回:)非常感谢!这最终对我有用,使用了我以前创建的相同的“间隔时间”列!将使用句点进行尝试,并确保返回相同的结果:)