如何计算一个因素在另一个因素中出现的次数?

How do I count the number of occurrences of a factor within another factor?

我是 R 的新手,所以请多多包涵!

我有一个数据集,其中包含飞蛾种类、记录飞蛾的人名(记录员)、记录它们的年份等。

我想创建一个新的 table,其中我有每年不同数量的蛾记录器。到目前为止,我已经设法制作了一个 table,它提供了每年制作的总录音,但这并不是我所需要的。

这是我使用过的代码,有人可以提供修改或替代方法吗?

#create table with number of moth recorders per year
library(plyr)
diversity <- ddply(mydata4, c("Year"), summarise,
                   N    = length(Recorder))

diversity

谢谢!

因为您是 R 的新手并且正在积极学习它的声音;我会给你一个正确的方向。当我自己弄明白并且不想抢走你的东西时,我总是发现事情最容易解决。

所以:听起来你想要的是 count of the distinct 记录器 按年份分组。 (提示提示)

我建议查看 dplyrtidyr 包 (for which there is a handy cheatsheet),因为它们对于这种数据帧操作非常有用。

此外,由于您刚刚开始学习 R,另一个值得一看的有用的东西(尽管与您眼前的问题无关)是 the Tidyverse Code Style Guide


对于那些希望详细说明答案的人,请参阅下文。如果你想自己弄清楚,现在就把目光移开。

原来的问题指出有一个数据集具有以下属性:

  • 蛾类
  • 记录者姓名
  • 记录飞蛾的年份。

据报道,问题中提供的代码产生了每年制作的录音总数的 table。由此我们可以推断出原始的table每条记录一行。

该问题还涉及两个特定列:YearRecorder。根据这些信息以及问题中提到的数据集包括蛾类这一事实,我们可以推断出该数据集至少有三列:

  • 物种
  • 录音机

所以,让我们编一些样本数据:

mydata4 <- data.frame(
  Species = c("Red", "Blue", "Red", "Blue", "Green"),      
  Year = c("2019", "2019", "2019", "2018", "2018"),
  Recorder = c("Alice", "Alice", "Bob", "Alice", "Alice")
)

现在,正如我上面提到的,我们需要按年份分组的不同记录器的计数...所以:

library(dplyr)
mydata4 %>% group_by(Year) %>% distinct(Recorder) %>% count()

我们按年分组,我们确保每组中的行由记录器区分,最后我们计算每组中的行数,因为此时我们已确保每个组中每个记录器只有一行谁在那一年记录了至少一只飞蛾。

# A tibble: 2 x 2
# Groups:   Year [2]
  Year      n
  <fct> <int>
1 2018      1
2 2019      2