如何创建一个列来标识汇总数据框中仅包含新数据的行?

How can I create a column identifying rows consisting only of new data in a summarized data frame?

我有一个基于先前研究构建的数据集,但包含许多全新的条目。清理后的数据集包含研究中包含的每个物种的平均值,这些物种是我使用 tidyverse.

中的 summarise 函数创建的
df<-data.frame(species = c("Species1","Species1","Species2","Species2","Species3","Species3"),
               new=c(TRUE,TRUE,TRUE,FALSE,FALSE,FALSE),var=c(1,1,2,2,3,3))
df2<-df%>%
  group_by(species)%>%
  summarise(var=mean(var))

我有一个列列出了观察结果是研究中的新观察结果还是从父研究中提取的。我想要做的是在清理后的数据框中创建一个向量,以便我可以轻松地显示和总结这项研究添加了多少新物种。有一些观察结果是现有物种的额外数据,但其他物种对目前的分析来说是全新的。我正在尝试找出一种方法来创建一个向量列来列出如果 只有 如果这个物种对这项研究来说是全新的,这样它产生如下数据 frame/tibble。

data.frame(species=c("Species1","Species2","Species3"),new=c("TRUE","FALSE","FALSE"),var=c(1,2,3))

在此数据框中,物种 1 是全新的,物种 2 具有新旧观测值,物种 3 具有全新的旧观测值。因此,对于我要创建的“新”向量,只有物种 1 是正确的。

我知道如何使用“&”和“|”改变基于 and/or 语句的列对于另一列中的某些级别,但我不确定如何创建一个列,其中 new = TRUE 如果用于创建汇总值的各个条目的 none 具有特定级别或字符串。我认为使用 ifelse() 语句可能是可能的,但我不确定如何考虑 species.

的每个级别来编写代码

要总结一个布尔向量,您可以 sum 它的值。因为TRUE是1,FALSE是0,所以sum(bool)会统计向量中TRUE的个数。 (和 sum(!bool) FALSE 的数量)

您可以查看没有旧的:

df%>%
  group_by(species)%>%
  summarise(new = sum( !new ) == 0)

或者新的行数与行数一样多:

df%>%
  group_by(species)%>%
  summarise(new = sum( new ) == n())

仅当所有值都是 TRUE

时才使用 all() 到 return TRUE
df %>%
  group_by(species) %>%
  summarize(new = all(new), var = mean(var))