选择包含值x或值y

问题描述

我在处理数据时遇到问题。

我的一个列中有一个具有不同日期的data.frame。我也正在分组一列,但这不应该是问题。 现在,我只想过滤df,即新的df包含日期x或日期y(例如20-03-18或20-03-19)。我尝试了函数xor(),但是我很费劲,没有得到任何结果。

new_df<-df%>%    
group_by(animals_id)%>% 
filter(any(day==xor("20-03-18","20-03-19"))

最后,我只想让动物编号包含日期“ 20-03-18”或(而不是&)“ 20-03-19”

我也尝试过filter(any(day==c("20-03-18","20-03-19")),但这只是过滤了包含两个日期的

感谢您的帮助!

df<-structure(list(animals_id = c("Hedwig","Hedwig","Heidi","Heidi"),day = structure(c(17937,17938,17939,17940,17941,17942,18304,18305,18306,18307,18308,18309),class = "Date")),row.names = c(NA,-12L),class = "data.frame")

解决方法

因为您提供的数据没有包含日期​​“ 2020-03-18”或“ 2020-03-19”的行,所以我必须包括一些包含这些日期的示例行,例如:

df <- bind_rows(
  df,data.frame(
    animals_id = c("Hedwig","Hedwig"),day = as.Date(c("2020-03-18","2020-03-19"))
  )
)

牢记这一点以及您的最后评论,我了解您希望首先确定在这些日期中具有一定价值的所有animals_id。然后,您要过滤属于这些animals_id的所有数据。换句话说,您要消除在这些日期中没有任何价值的animals_id的所有数据。在我的示例中,只有“ Hedwig” ID在这些日期中具有一些值,因此您要过滤所有属于“ Hedwig” ID的数据。

首先,要使所有animals_id完整,我使用%in%包中filter()中的dplyr运算符。这样,filter()将选择包含其中某些日期的每一行。然后,我按Animals_id分组并对其进行统计,因为我只对识别这些过滤行中的动物ID感兴趣。

library(dplyr)
library(magrittr)

select_animals_id <- df %>% 
  filter(day %in% as.Date(c("2020-03-18","2020-03-19"))) %>% 
  group_by(animals_id) %>% 
  count()

然后,我再次使用%in%中的filter()运算符来搜索df表中存在animals_id列中值的每一行在animals_id表的select_animals_id列中。由于select_animals_id表中仅存在“ Hedwig” ID,因此%in%运算符将在{{1}中找到df列中具有“ Hedwig”的每一行。 / p>

animals_id

导致的结果:

df <- df %>% 
  filter(animals_id %in% select_animals_id$animals_id)