【问题标题】:Dropping the rows by checking whether it has multiple values in R通过检查 R 中是否有多个值来删除行
【发布时间】:2017-10-05 19:16:03
【问题描述】:

我有一个这种形式的数据框;

Year  Department  Jan      Feb ................... Dec
2017  TF           15.15   225.51  ..............  5562.1
2015  CIF        ...................................  
2013  TTR       ....................................
2011  COR      ....................
.    .............................
.     ......................

总而言之,我想创建一个算法,但首先我必须进行此过滤:

  • 如果一个部门没有 2013、2014、2015、2016 年的值,那么我想从我的数据集中排除该部门。

  • 换句话说,通过读取每个部门的数据,按月份列中具有所有四年值的部门过滤数据。

我试过存在,is.na 但是多重过滤总是失败。另一个障碍是过滤器仅适用于单一条件,但在这里我需要 4 个条件。必须存在 4 年值才能在下一步中使用它们。

谢谢。

【问题讨论】:

  • 欢迎来到 SO。该站点不是代码编写服务,也不旨在提供完整的解决方案。当 SO 在这里帮助您解决特定的编程问题时,用户应该表现出一些努力和代码。你已经尝试过什么了吗?请阅读:stackoverflow.com/help/asking

标签: r filter


【解决方案1】:

我找不到这个问题的明确重复项。似乎是group_by 的快速修复:

library(dplyr)
df <- data_frame(Year = c(2013:2016, 2015, 2016),
           Department = c(rep('TF', 4), 'CIF', 'TTR'))

df
#> # A tibble: 6 x 2
#>    Year Department
#>   <dbl>      <chr>
#> 1  2013         TF
#> 2  2014         TF
#> 3  2015         TF
#> 4  2016         TF
#> 5  2015        CIF
#> 6  2016        TTR

df %>%
  group_by(Department) %>%
  mutate(x = Year %in% c(2013:2016),
         y = sum(x)) %>%
  ungroup() %>%
  filter(y == 4)
#> # A tibble: 4 x 4
#>    Year Department     x     y
#>   <dbl>      <chr> <lgl> <int>
#> 1  2013         TF  TRUE     4
#> 2  2014         TF  TRUE     4
#> 3  2015         TF  TRUE     4
#> 4  2016         TF  TRUE     4

【讨论】:

    【解决方案2】:

    使用 R 基础的解决方案:

    df = read.table(text = "Year, Department
    2016,TF
    2017,TF
    2013,CIF
    2014,CIF
    2015,CIF
    2016,CIF
    2013,TTR", header = TRUE, sep = ",", stringsAsFactors = FALSE)
    
    df[df$Department %in% subset(aggregate(subset(df, Year %in% c(2013,2014,2015,2016)), by=list(n$Department), FUN=length), Department==4)[,1], ]
    

    输出:

      Year Department
    3 2013        CIF
    4 2014        CIF
    5 2015        CIF
    6 2016        CIF
    

    【讨论】:

      猜你喜欢
      • 2019-02-25
      • 2017-01-17
      • 2020-12-09
      • 1970-01-01
      • 2017-04-18
      • 2012-04-22
      • 2018-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多