首页 > 解决方案 > 如果 R 中两个条件的总和小于 X,则删除数据行

问题描述

我正在查看两个海湾中鲸鱼的数量。我的数据结构如下:

  | Date  |Gulf |Calf |Adult |ALL |
------------------------------
 1|  9/09 | G   | 2   | 18   | 20
 2|  9/09 | S   | 1   | 20   | 21
 3| 10/09 | G   | 5   | 2    | 7
 4| 10/09 | S   | 3   | 2    | 5

我想使用 R 删除两个海湾上鲸鱼总数为 15 或更少的日期以及具有少于两个小牛的海湾。此示例中的输出如下所示:

  | Date  |Gulf |Calf |Adult |ALL |
------------------------------
 1|  9/09 | G   | 2   | 18   | 20

第 2 行在海湾 S 中的小牛少于 2 头,第 3 行和第 4 行当天总共有 12 头鲸鱼,少于 16 头。我尝试过:

sum <- plyr::ddply(Gs, c("Date", "Gulf"), numcolwise(sum))

morethanone<-(sum %>%
  group_by(Date,Gulf) %>%
  summarise(Calf=(Calf[Calf > 1]),Date, Gulf))

这段代码消除了少于 2 条鲸鱼的海湾,但随后我的数据按我不想要的日期/海湾求和。我还必须弄清楚如何摆脱两个海湾上鲸鱼总数为 15 或更少的日子。

非常感谢您的时间和帮助!

标签: r

解决方案


基本 R 选项可能使用subset如下

subset(df,ave(ALL,Date,FUN = min)>15 & Calf >=2)

或者

subset(df,ave(ALL>15,Date,FUN = all) & Calf >=2)

这使

  Date Gulf Calf Adult ALL
1 9/09    G    2    18  20

数据

> dput(df)
structure(list(Date = c("9/09", "9/09", "10/09", "10/09"), Gulf = c("G", 
"S", "G", "S"), Calf = c(2L, 1L, 5L, 3L), Adult = c(18L, 20L,
2L, 2L), ALL = c(20L, 21L, 7L, 5L)), class = "data.frame", row.names = c("1",
"2", "3", "4"))

推荐阅读