【问题标题】:select df that include value x OR value y选择包含值 x 或值 y 的 df
【发布时间】:2021-01-01 08:21:57
【问题描述】:

我的数据整理有问题。

我的其中一个列中有一个具有不同日期的 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”的animals_id

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

感谢您的帮助!

df<-structure(list(animals_id = c("Hedwig", "Hedwig", "Hedwig", "Hedwig", 
"Hedwig", "Hedwig", "Heidi", "Heidi", "Heidi", 
"Heidi", "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")

【问题讨论】:

  • 试试new_df&lt;-df%&gt;% group_by(animals_id)%&gt;% filter(day==as.Date("20-03-18") | day==as.Date("20-03-19"))
  • 谢谢,但现在 new_df 只包含包含过滤器中给定值的行,但所有其他来自 animals_id 的日期都已消失。我只需要查看这些日期是否在 df 中,因为我需要一个特定的时间范围来进行分析。

标签: r dataframe filter tidyverse data-wrangling


【解决方案1】:

由于您提供的数据没有包含日期​​“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,我使用filter() 中的%in% 运算符,来自dplyr 包。这样,filter() 将选择包含其中一些日期的每一行。然后我按 animal_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()

然后,我再次使用filter() 中的%in% 运算符来搜索df 表中的每一行,其中animals_id 列中的值存在于animals_id 列中select_animals_id 表。因为select_animals_id 表中只有“Hedwig” id,所以%in% 运算符将在df 中查找animals_id 列中包含“Hedwig”的每一行。

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

导致:

  animals_id        day
1     Hedwig 2019-02-10
2     Hedwig 2019-02-11
3     Hedwig 2019-02-12
4     Hedwig 2019-02-13
5     Hedwig 2019-02-14
6     Hedwig 2019-02-15
7     Hedwig 2020-03-18
8     Hedwig 2020-03-19

【讨论】:

    猜你喜欢
    • 2021-07-21
    • 2023-01-13
    • 2013-07-18
    • 1970-01-01
    • 2019-12-21
    • 1970-01-01
    • 2019-01-01
    • 2012-02-11
    • 2019-03-12
    相关资源
    最近更新 更多