因此,我有一个数据框,其中包含多个鱼类的标本的出现(存在多个属于同一物种的标本)。 数据框中有一列,其中标有某种标本的物种名称,以及以前从A到E的等级,该等级先前已分配给属于该物种的每个标本(这就是为什么罗非鱼种的两个标本都具有等级C,则将等级分配给整个物种,而不是单独分配给标本。
我想要的基本上是对每个年级(从A到E)进行计数,并为其分配了多少个物种。 不是多少标本(在此数据框中出现),而是物种。特别是,我希望一次返回每个年级的物种数量。 例如,一行代码获取A级物种的数量,另一行代码获取B级物种的数量,依此类推...
species | Grade |
-----------------------------------
Tilapia guineensis | B |
Tilapia zillii | C |
Fundulus rubrifrons | A |
Eutrigla gurnardus | D |
Sprattus sprattus | A |
Gadus morhua | E |
Tilapia zillii | C |
Gadus morhua | B |
我尝试过,但是没有用:
length(unique(df$species[df$grade=="A",]))
答案 0 :(得分:1)
dplyr方式将是
library(dplyr)
df %>%
group_by(species, grade) %>%
summarise(count = n())
#> # A tibble: 7 x 3
#> # Groups: species [6]
#> species grade count
#> <chr> <chr> <int>
#> 1 Eutrigla gurnardus D 1
#> 2 Fundulus rubrifrons A 1
#> 3 Gadus morhua B 1
#> 4 Gadus morhua E 1
#> 5 Sprattus sprattus A 1
#> 6 Tilapia guineensis B 1
#> 7 Tilapia zillii C 2
创建列联表的基本方法(也为您提供了0个计数)
as.data.frame(table(df))
#> species grade Freq
#> 1 Eutrigla gurnardus A 0
#> 2 Fundulus rubrifrons A 1
#> 3 Gadus morhua A 0
#> 4 Sprattus sprattus A 1
#> 5 Tilapia guineensis A 0
#> 6 Tilapia zillii A 0
#> 7 Eutrigla gurnardus B 0
#> 8 Fundulus rubrifrons B 0
#> 9 Gadus morhua B 1
#> 10 Sprattus sprattus B 0
#> 11 Tilapia guineensis B 1
#> 12 Tilapia zillii B 0
#> 13 Eutrigla gurnardus C 0
#> 14 Fundulus rubrifrons C 0
#> 15 Gadus morhua C 0
#> 16 Sprattus sprattus C 0
#> 17 Tilapia guineensis C 0
#> 18 Tilapia zillii C 2
#> 19 Eutrigla gurnardus D 1
#> 20 Fundulus rubrifrons D 0
#> 21 Gadus morhua D 0
#> 22 Sprattus sprattus D 0
#> 23 Tilapia guineensis D 0
#> 24 Tilapia zillii D 0
#> 25 Eutrigla gurnardus E 0
#> 26 Fundulus rubrifrons E 0
#> 27 Gadus morhua E 1
#> 28 Sprattus sprattus E 0
#> 29 Tilapia guineensis E 0
#> 30 Tilapia zillii E 0
然后按照您喜欢的方式仅对species
和grade
进行子集或过滤
答案 1 :(得分:0)
也许您有兴趣编写函数并应要求返回Grade
的计数
get_count_by_Grade <- function(df, Grade) {
sum(df$Grade == Grade)
}
get_count_by_Grade(df, "A")
#[1] 2
get_count_by_Grade(df, "D")
#[1] 1