R - 计算一列中的多个因素

R - Tally for multiple factors in a column

我有一个样本 data.frame,"events" 在一次潜水中捕获了多个猎物。基于捕获列,我使用 "handling" 一词来计算每次潜水捕获的次数。

然而,在某些情况下,我在一次潜水中有多种猎物类型。我如何计算出基于物种捕获的猎物数量(即一次潜水捕获了多少 fish.a 和多少 fish.b)?

如有任何建议,我们将不胜感激。

events <- data.frame(Prey_present =c("fish.a", "fish.a","", "fish.b", 
"fish.b","fish.b"),
Capture = c("","","handling", "", "", "handling") ,
Dive_id =c("dive.1", "dive.1","dive.1", "dive.1","dive.1", "dive.1"))

temp<- tapply(events$Capture, events$Dive_id, function(x) rle(x == 
"handling"))
ncaptures<- data.frame(id = names(temp), 
tally = unlist(lapply(temp, function(x) sum(x$values))))
final<-ncaptures[order(ncaptures$id),] 

我的最终输出(我将绑定到更大的 data.frame)应该是这样的:

final <- data.frame(fish.a =c(1),
fish.b = c(1),
Dive_id =c("dive.1"))                    
library(dplyr)               
new1<- events %>% group_by(Dive_id,Prey_present) %>% summarise(Capture = NROW(Capture))

这将为您提供所需的输出

摆脱 Capture 列并使用 dplyr 库来聚合

library(dplyr)

capture_tally <- events %>% group_by(Dive_id, Prey_present) %>% 
    summarise(Count_of_Captures = n())

它将按 Dive_id 和 Prey_Present 分组。然后使用 summarise 函数对捕获的每个特定潜水和猎物类型进行计数。

您可以随意命名 Count_of_Captures 列。

编辑:这是上述代码的输出。

 Dive_id        Prey_present         Count_of_Captures
  <fctr>       <fctr>               <int>
1  dive.1                              1
2  dive.1       fish.a                 2
3  dive.1       fish.b                 3

编辑:好的,试试这个。

library(tidyr); 

events %>% group_by(Dive_id, Prey_present) %>% 
   filter(Capture != "") %>%  # filter out captured ones (handling)
   summarise(Count = n()) %>%  #get the count for each fish type (long format)
   spread(Prey_present, Count) # Use the spread() function from tidyr package to convert the data from long to wide format

我猜你是什么时候捕捉栏是空白的,没有捕捉到鱼。并且您只计算它所说的实例 handling。我可能又误会了你,所以我道歉。