问题描述
我在处理数据时遇到问题。
我的一个列中有一个具有不同日期的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)