根据另一列中存在的数据,如何计算一列中特定值的出现次数?

时间:2019-09-13 22:20:44

标签: r

因此,我有一个数据框,其中包含多个鱼类的标本的出现(存在多个属于同一物种的标本)。 数据框中有一列,其中标有某种标本的物种名称,以及以前从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",]))

2 个答案:

答案 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

然后按照您喜欢的方式仅对speciesgrade进行子集或过滤

答案 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