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
。我可能又误会了你,所以我道歉。
我有一个样本 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
。我可能又误会了你,所以我道歉。