使用 dplyr 计算一个字符串并将它们加到 R 的新列中?

Count a string & sum them in a new column in R using dplyr?

我有一个数据集,其中包含跨多个“横断面”的不同类型的观察结果。对 R 还是很陌生,正在努力解决以下问题...

我需要计算每个样带中“巢”观察的数量,但我收到一个错误,这让我觉得我可能没有使用正确的函数?最后,我想创建一个名为“nest_number”的新列,其中观察值的总和等于 nest.

数据格式如下:

transect observation
1A nest
1A NA
1A nest
1A vocalization
1A NA
2A nest
2A NA
... ...

这是我需要的输出结果:

transect observation nest_number
1A nest 2
1A NA 2
1A nest 2
1A vocalization 2
1A NA 2
2A nest 1
2A NA 1
... ... ...

这是我使用的代码

dfNew <- df %>%
  group_by(transect) %>%
  mutate(number_nests = colSums(observation == "nest", na.rm = TRUE))

我得到的错误是:

'x' 必须是至少二维的数组 错误发生在第 1 组:transect = "1A".

它应该是 sum 而不是 colSums 因为 colSums 期望 data.frame/matrix,但这里我们在逻辑向量上做 sum ( observation == "nest")

library(dplyr)
df %>% 
  group_by(transect) %>% 
  mutate(nest_number = sum(observation == "nest", na.rm = TRUE)) %>%
  ungroup

-输出

# A tibble: 7 × 3
  transect observation  nest_number
  <chr>    <chr>              <int>
1 1A       nest                   2
2 1A       <NA>                   2
3 1A       nest                   2
4 1A       vocalization           2
5 1A       <NA>                   2
6 2A       nest                   1
7 2A       <NA>                   1